具有左连接提取的选择的HQL

时间:2012-09-15 11:59:19

标签: nhibernate hql

[注意] 请查看我的更新,了解真正的问题。我离开了原来的,以防它对任何人都有用......

试图让这个工作。就我所知,它看起来像文档中的Kats / Kittens示例,但是当我尝试使用它时,我得到一个NullReferenceException。

CustomerOrder order = CurrentSession.CreateQuery(
    @"select new CustomerOrder(Name)
      from CustomerOrder o
      left join fetch o.OrderItems as items
      where o.Id = :Id")
    .SetParameter("Id", id)
    .UniqueResult<CustomerOrder>();

如果我省略了连接提取(只是在没有OrderItems的情况下带回'CustomerOrder'),它就可以了。我的CustomerOrder有一个构造函数,它接受一个字符串'Name',数据库中有OrderItems记录,用于我检索的订单。

我做错了什么?

[更新] 我刚刚读到我想要做的事情并没有真正意义,因为我实例化一个带有一些值的新对象,而我正在做的是有效地尝试获取OrderItems,就好像它们属于新实例化的对象一样,他们没有。

我需要的是一个只填充名称字段的订单,以及它的集合或OrderItem子项,理想情况下只填充其“描述”字段。我想这样做,所以我不会像HQL通常那样检索所有列(出于性能原因)。

最好的方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

感谢JB Nizet和Rippo的见解。我尝试了一些东西,表现很好(无论如何我的目的)。如果它确实会导致问题,我会看看ResultTransformer,但我确信我的应用程序性能的其他方面对其运行速度(我可以通过性能分析等进行优化等)的影响远大于正在检索的列。