2010-06-21 124 views
7

我有一個集合,該集合在我的nHibernate映射文件中映射爲該集合的一個集合,並且希望返回集合中有一個或多個集合的所有實例其中我通過在對象的通過HQL檢查兩個集合的交集

例:

我的父類是稱爲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) 

角色是我希望在通過收集

那麼,如何做一個查詢返回DocumentDefi其中r(Roles Class)同時位於傳入的參數列表和DocumentDefinition對象上的集合中。

希望這是明確的!乾杯!

回答

7

你非常接近...查詢應該是:

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

你發送使用.SetParameterList("roles", collectionOfRoles)所需的角色。

順便說一句,我改變了與您發佈的映射不匹配的集合名稱。

還有一件事要考慮:lazy =「false」幾乎總是一個壞主意的集合。

+0

乾杯!完美工作。不敢相信我沒有明白!抱歉映射。我改變了名稱,使它們比實際的名稱更易於理解,而且不受上下文限制。 – Damien 2010-06-22 11:04:45