ホームページ > Java > &#&チュートリアル > 注釈を使用して Hibernate 4 でリレーションシップを定義するにはどうすればよいですか?

注釈を使用して Hibernate 4 でリレーションシップを定義するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-03 10:33:02
オリジナル
374 人が閲覧しました

How to Define Relationships in Hibernate 4 using Annotations?

Hibernate 4 での関係への注釈付け

Hibernate 4 と Spring では、注釈を使用してクラス間のさまざまな関係を定義できます。以下に、1 対 1、1 対多、多対 1、および多対多の関係を作成する方法の概要を示します。

一方向の 1 対 1 関係:

  • 所有クラスで @OneToOne を使用します (所有クラスの主キーは他のクラスを参照します)。
  • 他のクラスでは対応するマッピングは必要ありません。

双方向 1 対 1 関係:

  • 所有クラスで @OneToOne(mappedBy = "bar") を使用して関係を示しますは、他のクラスによって管理されます。
  • 所有クラスを指す mappedBy を使用して、他のクラスで @OneToOne を使用します。

一方向の 1 対多の関係を使用します。ユーザー管理の結合テーブル:

  • 所有クラスで @OneToMany を使用します。
  • エンティティ間の結合テーブルを定義するには @JoinTable を使用します。
  • いいえ他のクラスでマッピングが必要です。

外部キー マッピングを使用した双方向 1 対多の関係:

  • Use @OneToMany(mappedBy) = "bar") を所有クラスで使用します。
  • 所有クラスを指す mappedBy を使用して、他のクラスで @ManyToOne を使用します。

双方向多対Hibernate 管理結合テーブルを使用する多数:

  • 両方のクラスで @OneToMany を使用して自己参照関係を作成します。
  • @JoinTable を使用して結合テーブルを定義します。

ユーザー管理の結合テーブル オブジェクトを使用した双方向の多対多:

  • 両方のクラスで @OneToMany を使用して自己参照関係を作成します.
  • 結合テーブル オブジェクトとして別のクラスを定義します。

双方向関係の「所有」側の決定:

  • 通常、別のクラスのコレクションを持つクラスは「所有」側とみなされます。
  • これにより、外部キーが保存される場所と変更を管理するクラスが決まります。

FetchType の選択

  • 遅延フェッチ (デフォルト) では、必要な場合にのみ関連オブジェクトがロードされます。
  • イージャー フェッチ (fetchType = FetchType.EAGER を設定) では、

Hibernate.initialize() または FetchMode を使用して LazyInitializationException を回避する:

  • Hibernate.initialize(person.getRoles()) );遅延フェッチされたコレクションを積極的にロードします。
  • コレクションを積極的にロードするには、基準で setFetchMode("roles", FetchMode.SUBSELECT) を使用します。

カスケード方向の決定:

  • カスケードを使用して、関連エンティティ間でどの操作 (作成、更新、削除) をカスケードするかを指定します。
  • 必要に応じて、意味的に意味がある場合にのみ、カスケードを両方向に設定します。

孤立したエンティティ (参照されなくなったエンティティ) を自動的に削除するには、@OneToMany で orphanRemoval を有効にします。

以上が注釈を使用して Hibernate 4 でリレーションシップを定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート