4

次の HQL クエリで顧客を熱心に読み込む方法を考え出そうとしています。

select order.Customer
from Order as order
where order.Id in
(
  select itemId
  from BadItem as badItem
  where (badItemType = :itemType) and (badItem.Date >= :yesterday)
)

注文と顧客の間には通常の多対 1 の関係があります。

可能であれば、マッピングではなくクエリでこれを実行したいと思います-「結合フェッチ...」のように

たぶん、クエリは結合としてリファクタリングされ、私はメンタルブロックを抱えています.

何か案は?

4

1 に答える 1

9
select customer
from BadItem as badItem
join fetch badItem.Order as order
left join fetch order.Customer as customer 
where (badItemType = :itemType) and (badItem.Date >= :yesterday)

これを機能させるには、BadItem が Order に関連していない場合は、BadItem と Order の間に関係を追加するか、inner join追加の条件で を使用する必要があります (代替 2 を使用する場合はパフォーマンスに注意してください)。

別:

select customer
from Order as order
join fetch order.Customer as customer
where order.Id in
(
  select itemId
  from BadItem as badItem
  where (badItemType = :itemType) and (badItem.Date >= :yesterday)
)

編集:

どうですか:

select customer
from Order as order
join fetch order.Customer customer
join fetch customer.orders 
where order.Id in
(
  select itemId
  from BadItem as badItem
  where (badItemType = :itemType) and (badItem.Date >= :yesterday)
)
于 2010-09-10T12:10:43.410 に答える