두 지속성 엔티티가 있습니다 : User
및 UserDetail
입니다. 그들은 일대일 관계가 있습니다. 나는 최대 절전 모드 주석을 사용한다. 그러나 나는 동일한 데이터베이스 사용자 정보를 여러 사용자에게 제공하고 있습니다. 분명히 Hibernate 주석에 대한 지식은이 문제를 해결하는 데 그리 좋지 않다.최대 절전 모드 OneToOne 관계
사용자 클래스 :
@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 데이터베이스 테이블의 * –