双方向OneToOneのEntity
クラス定義概略
Employerエンティティ - Lockerエンティティ の、双方向1対1の関係を考える。
【Employerエンティティの定義】
@id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "employer_no")
Integer employerNo;
@Column(name = "name")
String name;
// Lockerのlocker_noを外部キーとする項目を持つ
@OneToOne
@JoinColumn(name = "locker_no")
private Locker locker;
// 自分自身をthis.locker.employerにset
// + this.lockerにlockerエンティティをaddするメソッド
public void add(locker l){-略-}
【Lockerエンティティの定義】
@id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "locker_no")
Integer lockerNo;
@Column(name = "abstract")
String abstract;
@OneToOne(mappedBy = "locker", cascade = CascadeType.ALL)
private Employer employer;
実行例
割愛
Note
親エンティティ、子エンティティどちらをpersistしても、双方ともにInsertされる
CascadeType.ALLを設定していないと、エラーとなる。
- org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing