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

内部或右侧外部加入NHibernate和流畅的NHibernate在多对多收藏

  •  6
  • snicker  · 技术社区  · 16 年前

    如何强制NHibernate在多对多集合上执行右外部联接或内部联接而不是左外部联接?

    我之所以要这样做是因为对集合元素应用了筛选。使用左联接,返回的行数与未筛选查询的行数相同,但筛选出的元素对所有字段都显示为空。但是,使用正确的联接,从查询返回正确数量的行和元素。

    我希望可以在集合映射的某个地方指定联接。

    2 回复  |  直到 16 年前
        1
  •  5
  •   John L    16 年前

    我认为不可能在集合映射中指定右联接或内部联接。唯一的选择是 fetch 子句是默认的左外部联接和顺序选择。

    问题是,在创建映射时,nhibernate需要知道如何从联接的左侧获取任意根项的集合元素。如果使用右联接或内部联接,则返回的集合中可能不存在根对象,因此此时您被卡住了。

    如果筛选条件是静态的,则可以指定 where 映射中的子句。我认为这将是针对您情况的建议解决方案。

    解决方法是使集合在对象中成为私有,然后创建另一个调用HQL查询以实现内部联接并返回该集合的属性。这个返回的集合将具有您想要的语义,但是您需要单独的方法来添加或删除集合中的项。

        2
  •  1
  •   JD Courtoy    16 年前

    您可以使用nhibernate的hql语法生成一个类似于SQL的查询,但使用nhibernate的映射功能。HQL载体 right outer join (或者只是 right join 简而言之)以下页面是nhibernate的hql查询语言的良好参考:

    推荐文章