У меня есть класс, который имеет набор, отображенный как сумка в моем nHibernate отображающийся файл для того класса, и я хочу возвратить все экземпляры того класса, набор которого имеет один или несколько объектов, в которых я передаю.
Пример:
Мой Родительский класс называют DocumentDefinition. Это имеет набор Ролей, который является nHibernate объектом, что документом можно получить доступ. Эти два соединены через отображение Many-Many. Я хочу передать запрос набор ролей и возвратить все экземпляры 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.
Надежда это ясно!Удачи!
Вы были очень близки ... запрос должен быть:
select distinct d
from DocumentDefinition d, MyRolesClass r
where r in (:roles) and r in elements(d.AllowedRoles)
И вы отправляете нужные роли, используя .SetParameterList ("roles", collectionOfRoles)
.
Кстати, я изменил название коллекции, которое не соответствует опубликованному вами сопоставлению.
Еще одна вещь, на которую следует обратить внимание: lazy = "false" почти всегда плохая идея для коллекций.