簡體   English   中英

休眠OneToOne關系

[英]Hibernate OneToOne relationship

我有兩個持久性實體: UserUserDetail 他們有一對一的關系。 我使用休眠注釋。 但是我在數據庫中獲得了一個用戶的多個用戶信息對象。 顯然,我對Hibernate批注的了解不足以解決此問題。

用戶類別:

@Entity
@Table(name = "USER")
public class User {

   @Id
   @GeneratedValue
   @Column(name = "ID")
   private Long id; 

   @Column(name = "NAME")
   private String name; 

   @Column(name = "PASSWORD")
   private String password;

   @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
   private UserDetail userDetail;

   // setters and getters

}

UserDetail類:

@Entity
@Table(name = "USER_DETAIL")
public class UserDetail {  

   @OneToOne
   @JoinColumn(name = "USER_ID")
   private User user;

   // other fields

}

我在代碼中按如下方式使用它:

UserDetail userDetail = new UserDetail();
userDetail.setInfo(info);
userDetail.setUser(seventhUser);
hibernateTemplate.saveOrUpdate(userDetail);

一切正常。 這是我的表USER_DETAIL USER_DETAIL表

但是,當我嘗試更改用戶信息時,我得到了錯誤的行為。 再次設置用戶信息后,得到以下表格:

UserDetail newUserDetail = new UserDetail();
newUserDetail.setInfo(newInfo);
newUserDetail.setUser(seventhUser);
hibernateTemplate.saveOrUpdate(newUserDetail);

在此處輸入圖片說明

為什么相同的兩個信息對象對應一個用戶? 我有一對一的關系。 如何避免這種情況? 我究竟做錯了什么?

如果要修改現有的UserDetail ,則必須設置其ID,或者從會話中獲取它並對其進行修改。 否則,Hibernate認為這是一個必須保存的新文件,因為它沒有任何ID。

UserDetail existingUserDetail = session.get(UserDetail.class, theUserDetailId);
existingUserDetail.setInfo(newInfo);

為確保您沒有為同一用戶保存兩個UserDetail實例,應在UserDetail數據庫表的USER_ID列上添加唯一約束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM