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 サイトの他の関連記事を参照してください。