2012-06-12 2 views
5

JPA EntityManagerとJPA Queryオブジェクトを使用して、@OneToMany(fetch = FetchType.EAGER)というアノテーションを持つものを、クエリーで遅れて取り出す方法を教えてください。実行時にFetchType.EAGERをオーバーライドする方法

私が休止状態のQueryオブジェクトを持っていた場合、それは基準オブジェクトを作成し、これを使用してフェッチタイプを遅延に設定することができました。しかし、JPA Queryオブジェクトを使用する必要があります。この問題の解決策はありますか?

+0

はい、できます - http://stackoverflow.com/questions/4388486/fetchmode-in-jpa-2-criteriaquery –

+0

これを参照してください:http: //stackoverflow.com/questions/17847289/ignore-a-fetchtype-eager-in-a-relationship。 – Dherik

答えて

4

ネイティブのHibernate APIを使用していても、これを行う方法はありません。アソシエーションがEAGERとして定義されている場合、アソシエーションは常に熱心に読み込まれ、クエリを使用してアソシエーションを変更する方法はありません。

逆のことは当てはまりません。クエリを使用して遅延結合を熱心に読み込むことができます。

+0

Damn。ありがとうございます、私はそれを行うためにHQLでfetch-keywordを使っています。 – hugelgupf

-1

Hibernate FetchプロファイルまたはJPAエンティティグラフを参照してください。この問題は2012年に質問されたため解決されました。

+0

これは解決されていません:https://hibernate.atlassian.net/browse/HHH-8776 - EntityGraphsを使ってもEAGERの読み込みを無視することはできません。 –

+0

ああ私の謝罪、私の答えを無視してください。典型的なユースケースは、エンティティグラフを使用してフェッチタイプを実行時に気になるように変更することです。私はHHH-8776を知りませんでした。おかげさまで、ありがとう。 – mancini0

関連する問題