代码之家  ›  专栏  ›  技术社区  ›  dommer

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

  •  4
  • dommer  · 技术社区  · 14 年前

    我正在尝试解决如何在以下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 回复  |  直到 14 年前
        1
  •  9
  •   Alexander Torstling    14 年前
    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)
    )