8

サーバーが JPA を使用してデータベースからオブジェクトをクエリし、Web サービスを介してオブジェクトをクライアントに送信するシナリオはほとんどありません。
このようなシナリオではクライアントは完全なグラフを期待するため、遅延ロードされたコレクションを熱心なロードでオーバーライドし、おそらくバッチロードを要求します (パフォーマンスのために)。JPA (または EclipseLink) でクエリを一般的な方法でオーバーライドし (クエリを書き直さずに)、完全なグラフを要求する方法はありますか?

4

2 に答える 2

9

10.1.3. フェッチ結合

JPQL クエリでは、1 つ以上の結合フェッチ宣言を指定できます。これにより、返されたインスタンスのどのフィールドをプリフェッチするかをクエリで指定できます。

SELECT x FROM Magazine x join fetch x.articles WHERE x.title = 'JDJ'


上記のクエリは Magazine インスタンスを返し、返されたインスタンスで article フィールドが既にフェッチされていることを保証します。

個別の結合フェッチ宣言で複数のフィールドを指定できます。

SELECT x FROM Magazine x join fetch x.articles join fetch x.authors WHERE x.title = 'JDJ'


ソース: http://docs.oracle.com/cd/E13189_01/kodo/docs40/full/html/ejb3_overview_query.html#ejb3_overview_join_fetch

于 2013-04-08T12:44:49.703 に答える
2

eclipselink を使用している場合は、組み込みのクエリ ヒントを使用できます。そうすれば、jpql を書き直す必要はありませんが、java でフェッチ タイプを定義できます。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Query_Hints#Join_Fetch

于 2013-04-08T13:05:16.490 に答える