ホームページ >Java >&#&チュートリアル >JoinColumn と MappedBy: エンティティ関係に適切な JPA アノテーションを選択するには?

JoinColumn と MappedBy: エンティティ関係に適切な JPA アノテーションを選択するには?

DDD
DDDオリジナル
2024-12-18 05:34:20973ブラウズ

JoinColumn vs. MappedBy: How to Choose the Right JPA Annotation for Entity Relationships?

JDBC: JoinColumn と MappedBy

Java Persistence API (JPA) では、JoinColumn と mappedBy はエンティティ間の関係を定義するために使用される 2 つのアノテーションです。これらのアノテーションの区別を理解することは、効率的なデータ モデリングとデータベースの対話にとって不可欠です。

JoinColumn: 所有権と外部キー

@JoinColumn アノテーションは、エンティティに次のアノテーションが付けられていることを示します。それは関係の所有者です。これは、対応するテーブルが、参照先テーブルの主キーを参照する外部キー列を保持していることを意味します。たとえば、提供されているサンプル コードでは次のようになります。

@JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")

Company エンティティは、Branch エンティティとの関係の所有者です。 Branch テーブルの companyIdRef 列は、Company テーブルの companyId 列を参照する外部キーとして機能します。

MappedBy: Inverse Relationships

一方、 @mappedBy アノテーションは、そのアノテーションが付けられたエンティティがリレーションシップの逆側にあることを示します。関係の所有者は、mappedBy 属性によって参照される「その他」エンティティ内に存在します。このシナリオでは:

@mappedBy = "companyIdRef"

Branch エンティティは Company エンティティとの関係の逆です。 Branch エンティティの companyIdRef 属性は双方向の関係を確立し、Branch エンティティから Company エンティティにアクセスできるようにします。

サンプル コードの注釈を修正

するには完全な双方向の関係を実現する場合、サンプル コードの正しいアノテーションは次のようになります。

@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;
}

By 正しく関係に注釈を付けると、Java アプリケーション内の関連エンティティ間でデータを効果的に移動および操作できます。

以上がJoinColumn と MappedBy: エンティティ関係に適切な JPA アノテーションを選択するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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