2011-08-08 78 views
0

我有一個類別類型和一個項目類型,與中間的雙向多對多關係。這種關係的雙方都很懶惰。我想寫一個查詢,在HQL或ICriteria中執行以下操作:給定一個類別的ID,加載它的所有項目(急切地加載)這些項目的類別集合。這樣的查詢會是什麼樣子?Eagarly加載多對多的關係

我得到儘可能:

session.CreateQuery("from Category c left join fetch c.Items where c.ID = :cid") 
     .SetParameter("cid", ofCategory.ID) 
     .List(); 

但我無法弄清楚如何適應在急切地加載每個項目的分類收集的部分。

請注意,我已經使用NHibernateUtil.Initialize()工作。然而,爲了教育的目的,我想嘗試一種不同的方式 - 可能更優雅。因此,它目前通過對相關項目和類別情況下先調用ISession.Lock(),然後工作:

foreach (Item i in ofCategory.Items) { 
if (!NHibernateUtil.IsInitialized(i.Categories)) 
    NHibernateUtil.Initialize(i.Categories); 
} 

回答

0

我已經在計算器另一個答案解釋difference between eager fetching and eager loading。據我所知,沒有其他的方式來加載收藏集,然後以某種方式訪問​​它們或通過撥打NHibernateUtil

最優雅的方式是當你編寫應用程序時,你不需要明確加載任何集合和引用。延遲加載應該對業務邏輯透明。