【非推奨】片方向OneToManyのEntity

クラス定義概略

Caution

SQLの発行数が多い、コードが冗長等、問題が多いため非推奨
../../_images/class_one_to_many.png
  • 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対多の関係は次の双方向の設定を使用すること