代码之家  ›  专栏  ›  技术社区  ›  Yannis

Nhibernate从lazy=false更改为fetch=将多对多连接起来

  •  0
  • Yannis  · 技术社区  · 16 年前

    <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在一个查询中加载所有文章及其类别,并相应地构造对象?如果我现在将其更改为join,它会为同一id返回多个对象。例如,如果文章5在cat 1和2中,它会两次返回5。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Sathish Naga    16 年前

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

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

    参考 nhibernate ref 文档

        2
  •  0
  •   Community Mohan Dere    9 年前