У меня есть два объекта сохранения: 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
}
Класс 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);
Почему одни и те же два объекта информации соответствуют одному пользователю?? У меня отношения Один-к-одному. Как я могу этого избежать? Что я делаю не так?