ホームページ > Java > &#&チュートリアル > JPA における JoinColumn と mappedBy: どのアノテーションをいつ使用するか?

JPA における JoinColumn と mappedBy: どのアノテーションをいつ使用するか?

DDD
リリース: 2024-12-21 19:11:11
オリジナル
657 人が閲覧しました

JoinColumn vs. mappedBy in JPA: When to Use Which Annotation?

JPA の JoinColumn と mappedBy の違いを理解する

Java Persistence API (JPA) では、エンティティ間の関係を管理することが重要です。リレーションシップを確立するための重要なアノテーションには、@JoinColumn と @mappedBy があります。

双方向のリレーションシップに @OneToMany アノテーションを使用する場合、リレーションシップの所有側と逆側を区別する必要があります。所有側で @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;
    ...
}
ログイン後にコピー

最初のコード例たとえば、Company は所有側であり、支店は外部キー列 companyIdRef を通じて参照されます。 2 番目の例では、Company はリレーションシップの逆側であり、ブランチはマップされた列 companyIdRef を通じて参照されます。

正しいアノテーションの使用法

で提供されるコードの場合

@Entity
public class Company {
    @OneToMany(mappedBy = "company",
               orphanRemoval = true,
               fetch = FetchType.LAZY,
               cascade = CascadeType.ALL)
    private List<Branch> branches;
}

@Entity
public class Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "companyId")
    private Company company;
}
ログイン後にコピー

これらのアノテーションを使用すると、双方向の関係が確立されます。会社と支店の間で、会社が逆側、支店が所有側となります。

以上がJPA における JoinColumn と mappedBy: どのアノテーションをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート