ネット上の hibernate fetch 戦略のリンクをいくつか調べました。私が気に入った簡潔で簡潔なリンクの 1 つは http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/です。4 種類のフェッチ戦略があります。これらは :-
- fetch-”join” = 遅延読み込みを無効にし、常にすべてのコレクションとエンティティを読み込みます。
- fetch-”select” (デフォルト) = すべてのコレクションとエンティティを遅延ロードします。
- batch-size=”N” = 最大 'N' 個のコレクションまたはエンティティをフェッチします。記録しません。
- fetch-”subselect” = コレクションをサブ select ステートメントにグループ化します。
私の最初の質問は、上記のどれが熱心なまたは遅延読み込みのフェッチ タイプに適していますか?
hibernate fetch 戦略について質問するために、Department クラスで以下のコード スニペットを検討しています。
@OneToMany(mappedBy = "department", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@Fetch(value = FetchMode.SELECT)
@BatchSize(size = 10)
private Set<EmployeeData> employees = new HashSet<EmployeeData>();
私の理解によると、フェッチタイプを熱心に言及するとすぐに、結合フェッチ戦略のみが残りますが、フェッチタイプとしてレイジーロードと言及すると、他の3つのオプション、つまり選択、バッチサイズ、サブ選択があります。同意しましたか?私のレガシープロジェクトのコードスニペットを見ると、フェッチタイプが熱心で、フェッチ戦略が互いに矛盾する選択として言及されています。右?
もう 1 つのクエリは、FetchMode を書き込むときにバッチ サイズ オプションが表示されないことです。他の3つのフェッチ戦略が表示されますが、Eclipseでコントロール+スペースを実行しますか?