<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>
这是在文章映射下。一篇文章可以在很多类别中,当然一个类别有很多文章。当这是懒惰=真,那么它的罚款。但问题是我想急切加载所有类别。所以问题是:
1)据我所知,我可以将其更改为lazy = false但似乎nhibernate仍会执行单独的查询。它是批量发送初始查询(例如获取所有文章)和后续文章(获取文章的类别)吗?因为它似乎不是这样
2)如果我想将此映射更改为连接,是否有任何方法可以使nhibernate在一个查询中加载所有文章及其类别并相应地构造对象?如果我现在将它改为连接,它会为同一个id带回多个对象。例如如果第5条在第1和第2栏中,它会带回5次。
答案 0 :(得分:1)
你可以用两种方式做到这一点,一种是在hbm文件中设置fetch选项,接下来你可以覆盖Query选项中的默认提取策略。
E.g。
User user = (User) session.CreateCriteria(typeof(User))
.SetFetchMode("Permissions", FetchMode.Join)
.Add( Expression.Eq("Id", userId) )
.UniqueResult();
参考nhibernate ref文档
答案 1 :(得分:0)
您可能需要查看this question。它看起来像一个类似的问题。