NHibernate的。使用2查询和合并加载实体

时间:2013-02-10 16:58:37

标签: nhibernate

我有很多子对象集合的复杂实体,也很复杂:

public class Order : AdvancedBaseOrder, ICheckable
{
    public virtual ICollection<RouteUnit> RouteUnits
    public virtual ICollection<Invoice> Invoices
    public virtual ICollection<Call> Calls;
    public virtual ICollection<Payment> Payments;
    ......
}

我的付款类汇总了很多其他对象

public class Payment:  ICheckable
{
    public virtual A A;
    public virtual B B;
    public virtual C C;
    public virtual D D;
    ......
}

我想通过2个查询获得订单:

  1. 不付款的订单实体(FetchMode.Lazy)
  2. 按订单加载付款并加入其对象
  3. 合并\合并订单及其付款
  4. 我不希望nhib延迟加载,因为我想覆盖付款对象的获取策略。

    所以我的问题是如何在一个聚合中合并两个查询结果 。感谢

1 个答案:

答案 0 :(得分:1)

在这种情况下,batch-size="25"设置可以为您完成工作。请阅读文档:19.1.5. Using batch fetching

批量大小可以应用于集合 maping:

付款类

<class name="Payment" batch-size="10">...</class>

付款收集

<class name="Order">
    <set name="Payments" batch-size="3">
        ...
    </set>
</class>

批处理如何工作:NHibernates加载所有Orders的集合。然后根据批量大小设置(例如25)创建很少的Payments来电,过滤了ID刚刚加载的订单

  

WHERE OrderId(@ o1,@ o2,@ O3 ... @ o25)

将在NHibernate会话中为您完成合并。根据我的经验,这是最强大的映射......懒惰和放大配料。