ホームページ >Java >&#&チュートリアル >JPA における JoinColumn と mappedBy: どのアノテーションをいつ使用するか?
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 サイトの他の関連記事を参照してください。