「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 「MappedBy」は JPA と Hibernate での双方向の関係をどのように促進しますか?

「MappedBy」は JPA と Hibernate での双方向の関係をどのように促進しますか?

2024 年 11 月 17 日に公開
ブラウズ:312

How Does `MappedBy` Facilitate Bidirectional Relationships in JPA and Hibernate?

JPA と Hibernate の MappedBy について

JPA や Hibernate のようなオブジェクト リレーショナル マッピング (ORM) フレームワークでは、MappedBy は便利なアノテーションです。エンティティクラス間の双方向の関係を確立します。このアノテーションは、1 対多および多対 1 の関係のコンテキストで使用されます。

推奨される使用法

MappedBy の推奨される使用法は次のとおりです。

  • 1 対多のリレーションシップ: 1 対多のリレーションシップでは、リレーションシップの「多」側 (コレクションを持つ側) に MappedBy が必要です。注釈。このアノテーションは、外部キー制約を保持するリレーションシップの「一方」側のフィールドの名前を指定します。
  • 多対 1 のリレーションシップ: 多対 1 の場合関係では、関係の「一方」側 (単一の参照オブジェクトを持つ側) に MappedBy アノテーションが必要です。このアノテーションは、外部キー制約を保持するリレーションシップの「多」側のフィールドの名前を指定します。

MappedBy の目的

MappedBy は機能します。いくつかの目的:

  • 双方向トラバーサル: 双方向リレーションシップでは、MappedBy を使用すると、両方のテーブルで明示的な外部キー定義を必要とせずに、リレーションシップを両方向にトラバースできます。
  • 最適化: リレーションシップの所有権を指定することで、MappedBy は不必要な結合テーブルや外部キー制約を回避してデー​​タベースのパフォーマンスを最適化できます。

Example

指定した例では、多くのAirlineFlightsを所有するAirlineと、1つのAirlineに属するAirlineFlightsであるMappedByを次のようにAirlineFlightクラスで使用する必要があります:

@Entity
@Table(name="AirlineFlight")
public class AirlineFlight {
    // ... other attributes ...

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="IDAIRLINE", nullable=false)
    @MapsId
    private Airline airline;
    // ... other attributes ...
}

この例では、@MapsId アノテーションは、AirlineFlight の IDAIRLINE フィールドが、Airline エンティティに対する外部キー制約として使用されることを示しています。ここで MappedBy を使用すると、両方のテーブルで外部キー制約を必要とせずに、Airline と AirlinesFlight の間に双方向の関係を確立できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3