ホームページ >Java >&#&チュートリアル >JPA と Hibernate の「MappedBy」は、双方向の関係を管理し、データベース スキーマの簡素性を向上させるのにどのように役立ちますか?

JPA と Hibernate の「MappedBy」は、双方向の関係を管理し、データベース スキーマの簡素性を向上させるのにどのように役立ちますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 13:01:30929ブラウズ

How does `MappedBy` in JPA and Hibernate help manage bidirectional relationships and improve database schema simplicity?

JPA と Hibernate の MappedBy について

MappedBy は、オブジェクト リレーショナル マッピングの Java Persistence API (JPA) と Hibernate の双方向関係を管理する上で重要な役割を果たします。これは、データベース コンテキストで複雑な関係をモデル化してナビゲートするための実用的な方法です。

MappedBy の推奨使用法

特定の例では、Airline が多数の AirlinesFlight を所有し、多くの AirlinesFlight が 1 つの航空会社に属しています。 、mappedBy は、情報の反復的な保存を避けるために使用されます。 AirlinesFlights を所有クラスにしたいため、Airline クラスに mappedBy 属性を指定します。

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

@OneToMany 注釈の mappedBy パラメーターは、AirlineFlights テーブルの IDAIRLINE 列が外部キーであることを指定します。これは、Airline テーブルの主キーにマッピングされます。こうすることで、Airline オブジェクトをクエリするときに、それに関連付けられた AirlinesFlights も簡単に取得できます。

MappedBy の目的

MappedBy は、いくつかの重要な目的を果たします。

  • SQL 結合による情報の重複の防止:mappedBy を使用しないと、Airline と AirlinesFlights の間の結合には、IDAIRLINE 主キーと、AirlineFlights テーブルの外部キーの両方が含まれます。これにより、データの重複やパフォーマンスの問題が発生する可能性があります。
  • データベース スキーマの簡素化: mappedBy を使用すると、外部キーが含まれるテーブルが 1 つだけになるため、データベースがより単純で正規化されるようになります。 schema.
  • 双方向ナビゲーションのサポート: 明示的な結合クエリを作成せずに、関係を両方向 (Airline から AirlinesFlights へ、またはその逆) にトラバースすることができます。

特定のシナリオ

この例では、AirplaneFlights テーブルには、Airline テーブルを指す外部キーとして IDAIRLINE 列がありますが、Airline テーブルには対応する IDAIRLINEFLIGHTS 列がありません。この設定では、Airline を所有者とすることが要件であっても、AirlineFlights が所有エンティティであることを示唆しています。

これを解決するには、それに応じて注釈を調整する必要があります。 airlineFlights の @OneToMany アノテーションは、AirlineFlight クラスに移動する必要があり、mappedBy 属性は、Airline クラスの「所有」フィールドを参照する必要があります。

<code class="java">@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="IDAIRLINE", nullable=false)
@MapsId
public Airline getAirline() {
    return airline;
}</code>

mappedBy と @MapsId を指定することで、関係を定義するには、Airline の主キー (AirlineFlights の IDAIRLINE 外部キーではありません) が使用されます。これにより、航空会社が所有エンティティとなり、必要に応じて積極的または遅延的に取得できるようになります。

以上がJPA と Hibernate の「MappedBy」は、双方向の関係を管理し、データベース スキーマの簡素性を向上させるのにどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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