###################################### 双方向OneToManyのEntity ###################################### クラス定義概略 ============================ .. image:: ./Images/class_one_to_many.png :scale: 50% - Companyエンティティ - Employerエンティティ の、双方向1対多の関係を考える。 :: 【Companyエンティティの定義】 @id @Column(name = "company_id") String companyId; @Column(name = "abstract") String abstract; @OneToMany(mappedBy = "company", cascade = CascadeType.ALL) private List employers // 自分自身をthis.employer.companyにset // + this.employersにemployerエンティティをaddするメソッド public void add(Employer e){-略-} :: 【Employerエンティティの定義】 @id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "employer_no") Integer employerNo; @Column(name = "name") String name; // Companyのcompany_idを外部キーとする項目を持つ @ManyToOne @JoinColumn(name = "company_id") private Company company; 実行例 ============================ :: var c = Company.build() -略- .build(); var e = Employer.build() -略- .build(); c.add(e) // Entity間の関連付け repositoy.save(c) // 親エンティティを永続化 :: Insert company_table (company_id, abstract) Values -略- // 関連付けされたエンティティも連動してInsertされる。company_idは親と同じ値が入る Insert employer_table (employer_no, name, company_id) Values -略- .. note:: | CascadeType.ALLを設定していない場合、親のみInsertされる。 :: var c = Company.build() -略- .build(); var e = Employer.build() -略- .build(); c.add(e) // Entity間の関連付け repositoy.save(e) // 子エンティティを永続化 :: 子のInsert文が発行されたのち、エラー(一時的なエンティティを参照している項目がある旨の文章) Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing .. note:: Insert処理が伝番して行われるのは、所有者側(mappedByが記述されている方)を永続化した場合のみ