gpt4 book ai didi

java - 在 mysql 中持久化 java 类并支持事务回滚

转载 作者:行者123 更新时间:2023-11-30 06:32:30 25 4
gpt4 key购买 nike

我有 3 个 @Entity 类映射到数据库中的 3 个表。实体类是

@Entity
@Table( name = "gbi_user" )
public class UserModel {

@Id
@GeneratedValue( strategy = GenerationType.AUTO )
@Column( name = "u_id" )
private Long id;

@Column( name = "u_fname" )
private String firstName;

@Column( name = "u_lname" )
private String lastName;

//getters and setters

}

@Entity
@Table( name = "gbi_reachable_address" )
public class AddressModel {

@Id
@GeneratedValue( strategy = GenerationType.AUTO )
@Column( name = "ra_id" )
private Long id;

@Column( name = "ra_city" )
private String city;
@Column( name = "ra_zip" )
private Integer zip;

// getters and setters
}

@Entity
@Table( name = "gbi_user_to_address" )
public class UserToAddress {

@Id
@GeneratedValue( strategy = GenerationType.AUTO )
@Column( name = "uta_id" )
private Long id;

@ManyToOne( fetch = FetchType.EAGER )
@JoinColumn( name = "uta_frn_user_id", referencedColumnName = "u_id" )
private UserModel user;

@ManyToOne( fetch = FetchType.EAGER )
@JoinColumn( name = "uta_frn_add_id", referencedColumnName = "ra_id" )
private AddressModel address;
//getters and setters
}

在我的代码中,我首先使用 jpa 的 save()UserModel 类保存到数据库。然后,我将 AddressModel 类保存到数据库中。最后,我将 UserToAddress 类保存到数据库中。它运行良好。但是,如果在保存UserToAddress类时出现一些异常,UserModelAddressModel仍然会保存在数据库中。如何避免?

最佳答案

您应该确保所有持久性都是在事务上下文中完成的。如果您正在使用 Spring,那么我强烈建议您查看 Spring 有关事务管理的文档。具体查看 @Transactional 注释。

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#transaction-intro

一种常见的方法是拥有一个 @Service 类,其方法标记为 @Transactional ,在该方法中,您将执行所有必要的工作来持久保存所有实体应该共享该事务上下文。

关于java - 在 mysql 中持久化 java 类并支持事务回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45818196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com