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