我有一個對象模型是這樣的:NHibernate的:在第二層次的集合不同的結果
class EntityA
{
...
IList<EntityB> BList;
...
}
class EntityB
{
...
IList<EntityC> CList;
}
我必須獲取所有colelctions(Blist在EntityA和欄列表中EntityB),因爲如果他們都將需要做一些操作,如果我不急於加載他們,我會有選擇n + 1的問題。 所以查詢是這樣的:
select a from EntityA a left join fetch a.BList b left join fetch b.CList c
拳頭問題我碰到這樣的查詢,是重複的從數據庫返回的,我有EntityA重複,因爲左聯同BList取。 通過hibernate文檔快速閱讀,並有一些解決方案,首先我嘗試了不同的關鍵字,supposelly不會複製SQL distinct關鍵字,除非在某些情況下,也許這是其中一種情況,因爲我有一個SQL錯誤說,我無法選擇distict文本列(EntityA表中的[Observations]列)。所以我使用其他解決方案之一:
query.SetResultTransformer(new DistinctRootEntityResultTransformer());
這工作正常。但操作的結果仍未通過測試。我進一步檢查,發現現在有重複的EntityB,因爲CList的左連接獲取。
問題是,我怎樣才能在第二級集合中使用獨特的?我搜索我只找到了根實體的直接子採集解決方案,但從來沒有第二個級別的子集...
謝謝您的時間
見我的回答這個[問題] [1](這幾乎是相同的副本:-)) [1]:HTTP://計算器。com/questions/7614661/loading-multi-level-collections-without-duplicates-in-nhibernate/7615646#7615646 – Goblin 2011-09-30 20:23:00