私は2つの永続性エンティティを持っています:User
とUserDetail
. それらは 1 対 1 の関係にあります。休止状態の注釈を使用します。しかし、同じユーザーのユーザー情報のいくつかのオブジェクトをデータベースに取得しています。どうやら、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);
同じ 2 つの情報オブジェクトが 1 人のユーザーに対応するのはなぜですか?? 私は一対一の関係を持っています。どうすればこれを回避できますか? 私は何を間違っていますか?