【问题标题】:Nhibernate change from lazy=false to fetch=join many-to-manyNhibernate 从lazy=false 更改为 fetch=join many-to-many
【发布时间】:2010-12-08 13:46:23
【问题描述】:

我有:

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

【问题讨论】:

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


    【解决方案1】:

    您可以通过两种方式做到这一点,一种是通过在 hbm 文件中设置 fetch 选项,其次是您可以在 Query options 中覆盖默认的 fetch 策略。

    例如

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

    参考nhibernateref文档

    【讨论】:

      【解决方案2】:

      您可能想查看this question。它看起来像一个类似的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多