?の代わりにFetchType.LAZY
withを使用する必要があるのはなぜですか。withは Eager モードと同じです。そうですか。なぜ置くとは、遅延初期化例外が発生した場合に追加できることを意味します。を直接使用できないのはなぜですか。fetchtype と? を使用する利点はありますか。FetchMode.JOIN
FetchType.EAGER
FetchType.LAZY
FetchMode.JOIN
Fetchmode.join
fetchmode=join
fetchtype.Eager
fetchmode.join()
4 に答える
結果セットのデータ モデルが小さい場合、 FetchType.EAGER は、FetchMode.JOINの待機時間とメモリ フットプリントに大きな影響を与えません。
技術的および環境的要因に応じて最適な効率を必要とする大量のデータセット モデルの場合、FetchType.LAZYは、結合テーブル ポインターがそのまま保持され、実際の結果セットはオンデマンドで保持されるという点でより望ましいものです。
例: データセット キーと積極的に結合された家屋オブジェクトは、電話番号オブジェクトと積極的に結合された市外局番オブジェクトと、効率とリソース使用率の点で累積的に異なります。
必要な場合:
- 小さな結果セットの結合にはFetchType.EAGERを使用します。
- また、効率が不可欠と見なされる大規模な結果セットの結合にはFetchType.LAZYを使用します。
FetchType は、エンティティ アノテーションで使用するのに適しています。ほとんどの場合、lazy
load を使用することをお勧めします。
この場合、 を防ぐ必要がある場合は、を使用しLazyIntializationException
てロードする基準をアドホックにリクエストできます。eager
FetchMode.JOIN
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.JOIN)
.setFetchMode("kittens", FetchMode.JOIN)
.list();
With fetch="join" on a collection or single-valued association mapping, you will actually avoid the second SELECT (hence making the association or collection non-lazy)
Referenced from
https://developer.jboss.org/wiki/AShortPrimerOnFetchingStrategies
給与睡眠のリスト (結合) を持つクラス Employee を考えてみましょう。1 人の従業員が 100 人以上の給料睡眠を取っていると言っています。
すべての従業員のリストが必要です(たとえば、1000)。従業員情報のみを表示したいとします (No Salary Sleeps)。しかし、Eager モードでロードすると、すべての給与がすべての従業員でロードされてスリープ状態になります。これはメモリのオーバーヘッドです。