ホームページ  >  記事  >  Java  >  JPA と Hibernate の `mappedBy` 属性は双方向の関係の管理にどのように役立ちますか?

JPA と Hibernate の `mappedBy` 属性は双方向の関係の管理にどのように役立ちますか?

DDD
DDDオリジナル
2024-11-03 06:34:30874ブラウズ

How does the `mappedBy` attribute in JPA and Hibernate help manage bidirectional relationships?

JPA と Hibernate の mappedBy について

はじめに

オブジェクト マッピングにおける双方向の関係は、多くの場合、回避するために慎重に処理する必要があります。データベースの不整合。 Hibernate は、これらの関係を確立するための簡潔な構文、mappedBy を提供します。この記事では、JPA と Hibernate での mappedBy の目的と使用法について説明します。

mappedBy とは?

MappedBy は、所有者エンティティの主キーが所有テーブルの列。これにより、一方のテーブルのみが他方のテーブルへの外部キーを持つ、双方向の関係をマッピングできます。これにより、所有者エンティティがリレーションシップの所有権を保持し、循環リレーションシップが回避されます。

mappedBy の目的

MappedBy は、オブジェクト内の重複した外部キ​​ー制約を回避する問題を解決します。双方向の関係。一方のテーブルを所有者として指定し、その主キーをもう一方のテーブルに保存することで、一貫したデータ整合性が保証されます。

使用法

mappedBy を使用するには、アノテーションを付ける必要があります。 mappedBy 属性を持つ子エンティティの @JoinColumn または @JoinTable。この属性は、関係を表す所有者エンティティ内のプロパティの名前を取得します。

クエリで提供される例を考えてみましょう。

<code class="java">@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name="IDAIRLINE")
public Set<AirlineFlight> getAirlineFlights() {
    return airlineFlights;
}</code>

@JoinColumn アノテーションは、外部キー制約を AirlinesFlight テーブルの IDAIRLINE 列に割り当てます。ただし、mappedBy 属性がありません。

Airline を関係の所有者にするには、次のように注釈を変更できます。

<code class="java">@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name="IDAIRLINE", mappedBy="airline")
public Set<AirlineFlight> getAirlineFlights() {
    return airlineFlights;
}</code>

mappedBy="airline" を追加することで、次のようになります。 AirlinesFlight テーブルの IDAIRLINE 列が、Airline エンティティの主キーであることを確認します。これにより、Airline テーブルに重複した外部キ​​ーを必要とせずに、Airline が AirlinesFlight インスタンスを所有する双方向の関係が確立されます。

以上がJPA と Hibernate の `mappedBy` 属性は双方向の関係の管理にどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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