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

Nhibernate 通过HQL检查两个集合的交集,nhibernate,hql,intersection,Nhibernate,Hql,Intersection,我有一个类,它有一个集合,映射为该类的nHibernate映射文件中的一个包,我希望返回该类的所有实例,该类的集合包含我传入的一个或多个对象 例如: 我的父类称为DocumentDefinition。它有一组角色,这是一个nHibernate实体,文档可以通过这些角色访问。这两者通过多对多映射进行连接。我想向查询传递一组角色,并返回所有DocumentDefinition实例,这些实例中有一个或多个角色被传入 父类上的映射,文档定义: <bag name="AllowedRoles" t

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

例如:

我的父类称为DocumentDefinition。它有一组角色,这是一个nHibernate实体,文档可以通过这些角色访问。这两者通过多对多映射进行连接。我想向查询传递一组角色,并返回所有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>
角色是我希望传递的集合

那么,如何执行查询以返回DocumentDefinition,其中r(角色类)位于传入的参数列表和DocumentDefinition对象的集合中


希望这是清楚的!干杯

你非常接近。。。查询应为:

select distinct d
from DocumentDefinition d, MyRolesClass r
where r in (:roles) and r in elements(d.AllowedRoles)
您可以使用
.SetParameterList(“roles”,collectionFroles)
发送所需的角色

顺便说一句,我更改了与您发布的映射不匹配的集合名称


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

干杯!工作得很好。真不敢相信我竟然没拿到!很抱歉映射了。我改变了名字,使它们比实际的名字更容易理解,断章取义。
select distinct d
from DocumentDefinition d, MyRolesClass r
where r in (:roles) and r in elements(d.AllowedRoles)