通过HQL检查两个集合的交集

时间:2010-06-21 08:44:12

标签: nhibernate hql intersection

我有一个类,它有一个集合,在我的nHibernate映射文件中映射为该类的包,我希望返回该类的所有实例,其集合中有一个或多个我传入的对象。

示例:

我的父类称为DocumentDefinition。它有一个Roles集合,它是一个nHibernate实体,可以访问该文档。这两个通过多对多映射连接。我希望将查询传递给角色集合,并返回所有传递了其中一个或多个角色的DocumentDefinition实例。

父类映射,DocumentDefinition:

 <bag name="AllowedRoles" table="Many-To-Many Table" lazy="false">
      <key column="ParentDefinition" /> //Column from Many-To-Many Table
      <many-to-many class="MyRolesClass" column="ParentRole" /> //Column from Many-To-Many Table
 </bag>

到目前为止我尝试过的例子:

Select distinct d from DocumentDefinition d, MyRolesClass r where r in :roles and r in elements(d.Group)

角色是我希望传递的集合。

那么如何进行查询以返回DocumentDefinitions,其中r(Roles Class)在传入的参数列表和DocumentDefinition对象的集合中。

希望很清楚!干杯!

1 个答案:

答案 0 :(得分:8)

你非常接近......查询应该是:

select distinct d
from DocumentDefinition d, MyRolesClass r
where r in (:roles) and r in elements(d.AllowedRoles)

然后使用.SetParameterList("roles", collectionOfRoles)发送所需的角色。

BTW,我更改了与您发布的地图不匹配的集合名称。

还有一件事需要考虑:lazy =“false”对于集合几乎总是一个坏主意。