ホームページ >Java >&#&チュートリアル >JPA と Hibernate の「MappedBy」は、双方向の関係を管理し、データベース スキーマの簡素性を向上させるのにどのように役立ちますか?
MappedBy は、オブジェクト リレーショナル マッピングの Java Persistence API (JPA) と Hibernate の双方向関係を管理する上で重要な役割を果たします。これは、データベース コンテキストで複雑な関係をモデル化してナビゲートするための実用的な方法です。
特定の例では、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 は、いくつかの重要な目的を果たします。
この例では、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 サイトの他の関連記事を参照してください。