2013-02-10 48 views
1

我有複雜的實體,有很多的對象,這是太複雜的兒童收集:NHibernate。負荷實體與2查詢和合並

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其支付

結合\合併爲了我不希望延遲加載付款,因爲我想重寫獲取支付的對象策略。

所以我的問題是如何合併在一個聚合 組合查詢的兩個結果。由於

回答

1

在這種情況下,batch-size="25"設置能爲你做的工作。閱讀文檔中的更多內容:19.1.5. Using batch fetching

批量coulde可以在集合應用馬平:

類Payment支付的

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

收集

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

如何簡而言之配料作品:NHibernates將裝入所有Orders的。然後,根據批量大小設置(如25)創建ID的只有我裝訂單過濾Payments幾次電話:

WHERE的OrderId在(@ O1,O2 @,@ O3 ... @ o25)

合併將在NHibernate會話中爲您完成。從我的經驗,這是最強大的地圖......懶惰&配料。

+0

我知道這個調整(bacth大小)。但我需要在加載懶惰實體時管理nhibernate獲取策略 – 2013-02-25 04:14:09