【非推奨】片方向OneToManyのEntity
クラス定義概略
Caution
SQLの発行数が多い、コードが冗長等、問題が多いため非推奨
Companyエンティティ - Employerエンティティ の、片方向1対多の関係を考える。
【Companyエンティティの定義】
@id
@Column(name = "company_id")
String companyId;
@Column(name = "abstract")
String abstract;
@OneToMany
@JoinColumn(name = "company_id")
private List<Employer> employers
// this.employersにemployerエンティティをaddするメソッド
public void add(Employer e){-略-}
@JoinColumn(name = 子エンティティのFK)を指定しないと、中間テーブルが作成されてしまう(joinTable戦略となる)
【Employerエンティティの定義】
@id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "employer_no")
Integer employerNo;
@Column(name = "name")
String name;
子エンティティ側には、関連の設定は行わない。
実行例
var c = Company.build() -略- .build();
var e = Employer.build() -略- .build();
c.add(e) // Entity間の関連付け
repositoy.save(e) // 子エンティティを永続化
repositoy.save(c) // 親エンティティを永続化
Insert employer_table (employer_no, name) Values -略-
Insert company_table (company_id, abstract) Values -略-
Update employer_table Set company_id = -略- // 子エンティティの外部キーのUpdateが自動で挿入される
Caution
javaコード上、親子双方ともに永続化する必要がある & Update文が余計に発行されている
よほどのことが無い限り1対多の関係は次の双方向の設定を使用すること