我有两个持久性实体:User
和UserDetail
. 他们是一对一的关系。我使用休眠注释。但是我在我的数据库中获取了同一用户的多个用户信息对象。显然,我对 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
}
用户详细信息类:
@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
:
但是当我尝试更改用户信息时,我得到了不正确的行为。再次设置用户信息后得到下表:
UserDetail newUserDetail = new UserDetail();
newUserDetail.setInfo(newInfo);
newUserDetail.setUser(seventhUser);
hibernateTemplate.saveOrUpdate(newUserDetail);
为什么相同的两个信息对象对应一个用户?我有一对一的关系。我怎样才能避免这种情况?我究竟做错了什么?