ホームページ >Java >&#&チュートリアル >JPA リレーションシップ: `@JoinColumn` と `mappedBy` の違いは何ですか?
JPA JoinColumn とmappedBy の違いを理解する
JPA では、エンティティ間の関係を定義するために @JoinColumn アノテーションと mappedBy アノテーションが使用されます。ただし、これらの関係を確立する際に異なる役割を果たします。
JoinColumn アノテーション
@JoinColumn アノテーションは、関係の所有側で使用されます。これは、@JoinColumn の注釈が付けられたエンティティには、参照されたエンティティを指す外部キー列があることを意味します。以下に例を示します。
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; ... }
この例では、Company エンティティが関係の所有側です。これには、Branch エンティティの 'companyId' 列を参照する 'companyIdRef' という名前の外部キー列があります。これは、Branch エンティティが特定の Company に関連付けられていることを示します。
mappedBy 注釈
mappedBy 注釈は、関係の非所有側で使用されます。これは、mappedBy の注釈が付けられたエンティティには、参照されたエンティティの外部キーを格納するフィールドがあることを意味します。以下に例を示します。
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
この例では、依然として Company エンティティが関係の所有者側です。ただし、Branch エンティティは逆側になります。これには、所有エンティティ (Company) の外部キーを格納する「companyIdRef」という名前のフィールドがあります。
主な違い
@JoinColumn と mappedBy の主な違いは次のとおりです。 that:
双方向の関係
@JoinColumn と mappedBy の両方で、エンティティ間の双方向の関係が許可されます。これは、注釈付きフィールドを使用して、あるエンティティから別のエンティティに移動できることを意味します。ただし、mappedBy の注釈が付けられたエンティティには独自のカスケード操作がないことに注意することが重要です。これは、逆エンティティに加えられた変更が、所有エンティティに自動的にカスケードされないことを意味します。
双方向の関係で完全なカスケード操作を有効にするには、@JoinColumn を所有側に配置し、mappedBy を逆側に配置することをお勧めします。側。これにより、いずれかのエンティティへの変更がもう一方のエンティティに適切にカスケードされることが保証されます。
以上がJPA リレーションシップ: `@JoinColumn` と `mappedBy` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。