8

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

例子:

我的父类称为 DocumentDefinition。它有一个角色集合,它是一个 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(角色类)在传入的参数列表和 DocumentDefinition 对象的集合中。

希望这很清楚!干杯!

4

1 回答 1

8

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

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

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

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

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

于 2010-06-21T21:19:08.743 回答