Nhibernate从lazy = false更改为fetch = join many-to-many

时间:2009-10-21 01:51:21

标签: nhibernate nhibernate-mapping many-to-many lazy-loading

我有:

<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次。

2 个答案:

答案 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。它看起来像一个类似的问题。