2

特定のクエリでのみ、エンティティ階層内のすべてのコレクションを熱心にフェッチすることは可能ですか?

例えば、

エンティティ部門には、エンティティ従業員のリストがあります。従業員には、エンティティアドレス のリストとエンティティ資格情報のリストがあります。部門 には、エンティティプロジェクトの別のリストがあります。

特定のクエリでこれらすべてのコレクション(実際にはもっと多くのコレクションがあります)を熱心にフェッチしたいのですがSELECT dept FROM Department dept、他の場合ではフェッチしません(したがって、FetchType.EAGERで注釈を付けることはできません)。出来ますか?

Eclipselinkを使用しています。

前もって感謝します。

4

3 に答える 3

7

結合フェッチ、バッチフェッチ、またはグループのロードを使用できます。

複数のコレクションを使用するとパフォーマンスが大幅に向上するため、結合フェッチよりもバッチフェッチをお勧めします。

見る、

http://java-persistence-performance.blogspot.com/2010/08/batch-fetching-optimizing-object-graph.html

また、 http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/q_batch.htm#batch

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/q_join_fetch.htm#fetch

http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup#Load_Examples

于 2013-01-03T14:00:16.223 に答える
4

ネストされたフェッチ結合はJPAでは許可されていません。EclipseLinkクエリヒントを使用する必要がありますeclipselink.join-fetchこの質問への回答を参照してください。

于 2013-01-03T10:04:50.293 に答える
1

正しく思い出せばFETCH JOIN、クエリでステートメントを使用する必要があります。

参照:フェッチ結合

于 2013-01-03T09:25:50.730 に答える