0
我有两个持久实体:User
和UserDetail
。他们有一对一的关系。我使用hibernate注释。但我正在为我的数据库获取一个用户信息的几个对象。显然,我对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
:
但是,当我尝试更改用户信息时,我得到一个不正确的行为。我得到下面的表格后,我重新设置用户信息:
UserDetail newUserDetail = new UserDetail();
newUserDetail.setInfo(newInfo);
newUserDetail.setUser(seventhUser);
hibernateTemplate.saveOrUpdate(newUserDetail);
为什么的信息相同的两个对象对应一个用户?我有一对一的关系。我怎样才能避免这种情况?我究竟做错了什么?
我可以以某种方式让Hibernate在数据库级别检查数据的一致性吗?没有这样的情况,几个对象与一个用户有关,但与一对一的关系 – Michael
*为了确保不为同一用户保存两个UserDetail实例,您应该在USER_ID列上添加一个唯一约束UserDetail数据库表的* –