2011-11-08 7 views
0

@Entity Bへの熱心な@ManyToOneを持つ@Entity Aがあるとします。このBには、呼び出されたコレクションに対する遅延(デフォルト)@OneToManyがあります。以下のような私が何かをしたい「画像」hql - 親をフェッチするときに子エンティティの遅延コレクションを設定する方法

:( - > BリンクAからの単方向であるA)は

"select a from A a join fetch a.b.images where a.b = :b" 

は、これはBの特定のインスタンスのインスタンスを見つけクエリです。 上記のアプローチのような何かをしようとすると、私に休止状態例外ランド:

query specified join fetching, but the owner of the fetched association was not present in the select list 

しかし

"select a, a.b.images from ..." 

のようなものは、A(画像の量を乗じた)

のすべてのインスタンスに対して複数の結果を返しますしよう

どのように私はabimagesを投入するAにクエリを書くのですか?

答えて

1

これを試してください。まずfetch a.bに参加してエイリアスを割り当て、fetch alias.imagesに参加する必要があります。詳細については、docsを確認してください。 a.bとb.imagesが両方とも一対多である場合、これを行うのは良い考えではありません。結果セットの爆発につながります。バッチサイズやサブセレクトのようなものは、バッチサイズを最適化するより良い方法です。

"select a from A a join fetch a.b x join fetch x.images where a.b = :b" 
関連する問題