1

我有一个复杂的实体,其中包含很多子对象集合,这些对象也很复杂:

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. 结合\合并订单及其付款

我不希望 nhib 延迟加载支付,因为我想覆盖支付对象的获取策略。

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

4

1 回答 1

1

在这种情况下,batch-size="25"设置可以为您完成这项工作。在文档中阅读更多内容:19.1.5。使用批量获取

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

支付类

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

收款

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

简而言之,批处理是如何工作的:NHibernates 加载所有Orders. 然后基于批量大小设置(例如 25)创建几个调用来Payments过滤ID刚刚加载的Orders

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

合并将在 NHibernate 会话中为您完成。根据我的经验,这是最强大的映射... Lazy & Batching。

于 2013-02-10T18:44:37.640 回答