JPA JoinColumn とmappedBy について
JPA では、@JoinColumn アノテーションは、現在のエンティティの列を参照する外部キー列を定義します。参照されるエンティティ。対照的に、mappedBy 属性は、現在のエンティティが双方向関係の逆側であることを指定します。つまり、外部キーの所有権は参照先エンティティに存在します。
所有権と逆関係
@JoinColumn を使用する場合、アノテーションを持つエンティティはリレーションシップの「所有者」とみなされます。そのため、そのテーブルには、参照されるテーブルにリンクする外部キー列が含まれます。一方、mappedBy 属性は、この注釈を持つエンティティが関係の「逆」側であることを示します。外部キーの所有権は、mappedBy によって参照されるエンティティに存在します。
注釈の例
違いを示す例を次に示します。
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; ... } @Entity public class Company { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
最初のコード ブロックでは、@JoinColumn が使用され、Company が関係の所有者になります。 Company のテーブルには、Branch テーブルの "companyId" 列を参照する外部キー列 "companyIdRef" が含まれます。
2 番目のコード ブロックでは、mappedBy が使用され、Company がリレーションシップの逆側になります。 Branch が所有者になり、そのテーブルには Company の "companyId" 列を参照する外部キー列 "companyIdRef" が含まれます。
双方向関係
mappedBy を使用する場合、関係のどちら側からも関連エンティティにアクセスできるため、双方向のナビゲーションが可能になります。 @JoinColumn を単独で使用する場合、外部キーの所有権は 1 つのエンティティのみに存在するため、これは不可能です。
以上がJPA: @JoinColumn と mappedBy: いつどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。