ホームページ  >  記事  >  Java  >  JPA と Hibernate の「MappedBy」は、双方向の関係におけるデータの不整合をどのように防ぐのでしょうか?

JPA と Hibernate の「MappedBy」は、双方向の関係におけるデータの不整合をどのように防ぐのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 12:14:30575ブラウズ

How Does `MappedBy` in JPA and Hibernate Prevent Data Inconsistencies in Bi-directional Relationships?

JPA と Hibernate の MappedBy について

オブジェクト リレーショナル マッピング (ORM) では、エンティティ間の双方向の関係は、無限ループや一貫性のないデータ状態を避けるために慎重に処理する必要があります。 。 MappedBy は、この問題を解決する JPA および Hibernate アノテーションの属性です。

MappedBy の役割を理解する:

MappedBy は、どのエンティティが関係を所有し、外部キーを所有しているかを指定します。データベース内の列。これは、非所有エンティティのマッピング アノテーションに適用され、関係が所有エンティティのテーブルの外部キーによってマップされていることを示します。

使用上の推奨事項:

場合双方向の関係を定義する場合は、次のガイドラインに従うことをお勧めします。

  • 所有エンティティを識別します。
  • 外部キーを指定して、所有エンティティのマッピングに @JoinColumn アノテーションを追加します。列。
  • エンティティ間に結合テーブルが必要な場合は、@JoinTable アノテーションを追加します。
  • 所有エンティティのマッピング フィールド名を参照して、非所有エンティティのマッピングに @MappedBy アノテーションを適用します。

例:

Airline エンティティと AirlinesFlight エンティティでは、Airline が関係の所有者である必要があります。正しいアノテーションは次のとおりです。

<code class="java">// Airline.java
@OneToMany(mappedBy = "airline")
public Set<AirlineFlight> getAirlineFlights() { return airlineFlights; }

// AirlineFlight.java
@ManyToOne
@JoinColumn(name = "IDAIRLINE")
public Airline getAirline() { return airline; }</code>

MappedBy の目的:

MappedBy は 2 つの主な目的を果たします:

  • 所有エンティティを指定します。双方向のリレーションシップで、外部キーの重複を防ぎます。
  • 再帰ループやその他のデータの不整合の問題を作成せずに、どちらかのエンティティからのリレーションシップのトラバースを許可します。

以上がJPA と Hibernate の「MappedBy」は、双方向の関係におけるデータの不整合をどのように防ぐのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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