「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Spring を使用して Hibernate 4 でアノテーションとの関係を定義する方法

Spring を使用して Hibernate 4 でアノテーションとの関係を定義する方法

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

How to Define Relationships with Annotations in Hibernate 4 using Spring?

Spring を使用した Hibernate 4 でのアノテーションとの関係の定義

提供されたクラスに対して Hibernate 4 でアノテーションを使用してさまざまなタイプの関係を実装するには、Foo

1 対多の一方向関係:

@OneToMany アノテーションと Listプロパティ。 Bar クラスは変更しないでください。これにより、Foo が複数の関連付けられた Bar オブジェクトを持つことができる 1 対多の関係が確立されますが、Bar は Foo.

双方向 1 対多の関係 (Foo.class によって管理されます) を参照することはできません。 ):

Foo.class で cascade = CascadeType.ALL を指定して @OneToOne アノテーションを使用します。 @JoinColumn アノテーションを追加して、結合に使用する Bar.class の列を指定します。 Bar.class の場合は、@OneToOne アノテーションを使用し、mappedBy = "bar" を指定して、関係が Foo.class.

User- を使用した 1 対多の一方向関係によって管理されることを示します。管理対象結合テーブル:

@OneToMany アノテーションを @JoinTable アノテーションとともに使用して、別の結合テーブルを指定します。両側に @JoinColumn アノテーションを使用して結合列を定義します。必要に応じて、追加のクラスを使用して結合テーブルを表します。

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

Foo.class では、 @OneToMany(mappedBy = "bar") を使用して関係をマップします。 Bar.class では、@ManyToOne(cascade = { CascadeTyep.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) を @JoinColumn アノテーションとともに使用します。

Hibernate を使用した双方向多対多-管理対象結合テーブル:

Foo.class と Bar.class の両方で @ManyToMany を使用し、結合テーブルに @JoinTable アノテーションを使用して、結合列を指定します。

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

一方向の 1 対多の例と同様に、@JoinTable アノテーションを付けて @OneToMany を使用します。結合テーブルを表す別のクラスを作成し、@ManyToOne を使用して Foo.class と Bar.class の両方にリレーションシップをマップします。

フェッチ タイプの決定:

Use fetchType .LAZY は、関連するコレクションがアクセスされるまでロードを遅らせます。 fetchType.EAGER を使用してコレクションをすぐにロードしますが、パフォーマンスに影響を与える可能性があることに注意してください。特定のユースケースで遅延ロードされたコレクションを手動で初期化するには、Service クラスで Hibernate.initialize() を使用することを検討してください。

カスケード方向の決定:

@Cascade アノテーションを使用して、カスケード オプションを指定します。一般に、カスケードは所有関係の方向に変化します。アプリケーションのコンテキストで意味をなさない場合、子から親への更新や削除のカスケードは避けてください。

Orphan Removal:

Set orphanRemoval = true @OneToMany アノテーション。親オブジェクトのコレクションから孤立したオブジェクト (つまり、他の親オブジェクトに関連付けられていないオブジェクト) が親オブジェクトのコレクションから削除されたときに、Hibernate に自動的に削除されます。

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

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

Copyright© 2022 湘ICP备2022001581号-3