我有一个类,它有一个集合,在我的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对象的集合中。
希望很清楚!干杯!
答案 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”对于集合几乎总是一个坏主意。