我可以使用HQL来加载属性吗?

dom*_*mer 4 nhibernate select hql eager-loading

我正在尝试解决如何在以下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)
)
Run Code Online (Sandbox Code Playgroud)

订单和客户之间通常有多对一的关系.

我想这样做是在查询,而不是在映射,如果可能的话 - 因为在"连接抓取......"

也许查询会被重构为一个连接,我有一个心理障碍.

有任何想法吗?

Ale*_*ing 7

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)
Run Code Online (Sandbox Code Playgroud)

为此,您需要在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)
)
Run Code Online (Sandbox Code Playgroud)

编辑:

关于什么:

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)
)
Run Code Online (Sandbox Code Playgroud)