我有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
课程时出现某些异常,则仍会将UserToAddress
和UserModel
保存在数据库中。如何避免呢?
答案 0 :(得分:1)
您应确保所有持久性都在事务的上下文中完成。如果您正在使用Spring,那么我强烈建议您查看Spring关于事务管理的文档。具体来看@Transactional
注释。
http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#transaction-intro
一种常见的方法是使用@Service
类,其方法标记为@Transactional
,并且在该方法中,您将执行所有必要的工作以持久保存应共享该事务上下文的所有实体。