使用事务回滚支持在mysql中保留java类

时间:2017-08-22 12:51:28

标签: java spring-boot spring-data-jpa

我有3个let password = "replace_it_for_smt_related_to_the_user" var securityKey:Data! = Data() securityKey = self.password.data(using: .utf16, allowLossyConversion: true)?.subdata(in: 0...32) 类映射到我的数据库中的3个表。实体类是

@Entity

在我的代码中,我首先使用jpa @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 } UserModel类保存到数据库。然后,我将save()类保存到数据库。最后,我将AddressModel类保存到数据库。它工作正常。但是,如果在保存UserToAddress课程时出现某些异常,则仍会将UserToAddressUserModel保存在数据库中。如何避免呢?

1 个答案:

答案 0 :(得分:1)

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

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

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