双方向OneToOneのEntity

クラス定義概略

../../_images/class_one_to_one.png
  • 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