版權聲明:本文首發 http://asing1elife.com ,轉載請注明出處。 https://blog.csdn.net/asing1elife/article/details/82811799
Hibernate建立一對一關系時兩張表主表保持一緻則可以實作自動新增和删除
更多精彩
- 更多技術部落格,請移步 asing1elife’s blog
主表配置
- 主表對應類中需要通過**@OneToOne**來表示其與從表的關系
@Entity
@Table(name = "sys_user")
public class User {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id = new Long(0);
@OneToOne(cascade = {CascadeType.ALL}, mappedBy = "user", fetch = FetchType.LAZY)
@JsonIgnore
private UserAccount userAccount;
public UserAccount getUserAccount() {
return userAccount;
}
public void setUserAccount(UserAccount userAccount) {
this.userAccount = userAccount;
}
}
從表配置
- 從表中的id需要通過**@GeneratedValue和@GenericGenerator**來指明該值從主表中擷取
- 從表中同時需要通過**@OneToOne**來表示其與主表的關系
- 在維護與主表關系中需要通過**@PrimaryKeyJoinColumn**來表示兩個表是主鍵關聯,不存在多餘外鍵
@Entity
@Table(name = "sys_user_account")
public class UserAccount {
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "user"))
private Long id = 0L;
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
private User user;
public UserAccount() {
}
public UserAccount(User user) {
this.user = user;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
儲存操作
- 主表在執行儲存操作時,需要将從表注入其中,同時将主表的引入也注入到從表,才能實作兩個對象的雙向關聯
- 當主表的id自增成功時,由于從表保有對主表的引用,是以也可以得到主表的id
public void save(User user) {
if (user.isNew()) {
user.setUserAccount(new UserAccount(user));
super.save(user);
} else {
super.save(userModel);
}
}