12

Hibernate で遅延読み込みを無効にするにはどうすればよいですか? hbm xml ファイルではなく、持続性アノテーションを使用しています。

ID で 1 つのオブジェクトをフェッチしており、すべてのプロパティをロードしたいと考えています。オブジェクトを使用する前にセッションが閉じられます。

ありがとう!

4

4 に答える 4

6

FetchType.EAGER で非遅延ロードするプロパティに注釈を付ける必要があります

   @ManyToOne(fetch = FetchType.EAGER)

おわかりのように、遅延ロードされているのは、ロードしているオブジェクトではありません。むしろ、そのオブジェクトの関連付けは怠惰であり、それが望ましい動作である場合は、怠惰にならないように指示する必要があります。

それらのオブジェクトに、積極的にロードしたい関連付けもある場合は、それらにも注釈を付ける必要があります。

于 2011-03-29T21:30:32.653 に答える
0

すべてのアソシエーションを再帰的に指定することもできますfetch = FetchType.EAGERが、これはおそらく関心のない大量のデータをロードすることになります。

通常は、少なくともすべての OneToMany および ManyToMany アソシエーションを LAZY に (これがデフォルトです) 許可し、ユースケースで必要な場合 (またはアドホック クエリでそれらをロードする場合) は、セッションを閉じる前にそれらを初期化することをお勧めします。

OneToOne および ManyToOne アソシエーションはデフォルトで EAGER であり、これによりすでに多くのリクエストが生成されています。すべてのユースケースで関連付けを取得する必要がない限り、私は通常、すべてを遅延としてマークすることを好みます。

于 2011-03-29T21:34:12.293 に答える
0

レイジーをオフにしたいすべてのコレクションとエンティティに fetch = FetchType.EAGER を使用します。

これもチェックしてください: http://techblog.bozho.net/?p=645

于 2014-07-17T18:14:27.447 に答える