Проверка Пересечения Двух Наборов через HQL

У меня есть класс, который имеет набор, отображенный как сумка в моем 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.

Надежда это ясно!Удачи!

8
задан Damien 21 June 2010 в 09:45
поделиться

1 ответ

Вы были очень близки ... запрос должен быть:

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

И вы отправляете нужные роли, используя .SetParameterList ("roles", collectionOfRoles) .

Кстати, я изменил название коллекции, которое не соответствует опубликованному вами сопоставлению.

Еще одна вещь, на которую следует обратить внимание: lazy = "false" почти всегда плохая идея для коллекций.

8
ответ дан 5 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: