ホームページ >Java >&#&チュートリアル >JPA: @JoinColumn と mappedBy: いつどちらを使用するか?

JPA: @JoinColumn と mappedBy: いつどちらを使用するか?

DDD
DDDオリジナル
2024-12-15 22:39:24870ブラウズ

JPA: @JoinColumn vs. mappedBy: When to Use Which?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。