2009-10-21 64 views
0

我有:NHibernate的變化來獲取=加入許多一對多

<bag name="Categories" table="CMS_Articles_Categories" lazy="true"> 
    <key column="article_id"/> 
    <many-to-many class="Framework.CMS.Domain.Category, Framework.CMS" column="category_id"/> 
</bag> 

這是下條映射。一篇文章可以有很多類別,當然一個類別有很多文章。當這是lazy = true時,那很好。但事情是,我想急切地加載所有類別。所以問題是:

1)我知道我可以將其更改爲lazy = false,但似乎仍然NHibernate的執行一個單獨的查詢。難道發出初始查詢(如獲得所有文章)和隨後的一個(讓文章的類別)分批?導致它似乎沒有那麼

2)如果我想這個映射更改爲加入,有沒有什麼辦法讓NHibernate的負載在一個查詢中的所有文章,其類別,並相應構建的對象?如果我現在改變它的加入帶來回相同ID的多個對象。例如如果第5條在貓1和2中,則它將兩次返回5。

回答

2

你可以做,在2種方式,一種是通過設置在HBM文件中提取選項,下一個是你可以覆蓋默認的查詢選項獲取策略。

E.g.

User user = (User) session.CreateCriteria(typeof(User)) 
      .SetFetchMode("Permissions", FetchMode.Join) 
      .Add(Expression.Eq("Id", userId)) 
      .UniqueResult(); 

參考nhibernateref文檔

0

你可能想看看this question。它看起來像一個類似的問題。