Ответ 1
Я думаю, вам нужен подзапрос, чтобы выразить его в SQL, поэтому в HQL также необходим подзапрос:
select u from SystemUser u
where not exists (
select 1 from UserGroup g where g.user = u and g not in (?)
)
Я хочу проверить, содержится ли хотя бы один элемент коллекции (u.organisations
) в другой коллекции (?
= excludedOrganisations):
select distinct u from SystemUser u
join u.userGroups g
join u.organisations o
where 3 in elements(g.permissions) and
EACH_ELEMENT_OF(o) not in (?)
Как я могу выразить EACH_ELEMENT_OF
с помощью HQL?
Мое последнее испытание:
select distinct u from SystemUser u
join u.userGroups g
where 3 in elements(g.permissions) and
not exists (
select org from Organisation org
where org in elements(u.organisations)
and org not in (?)
)
Но я получаю исключение:
IllegalArgumentException occurred calling getter of Organisation.id
Я думаю, вам нужен подзапрос, чтобы выразить его в SQL, поэтому в HQL также необходим подзапрос:
select u from SystemUser u
where not exists (
select 1 from UserGroup g where g.user = u and g not in (?)
)
Это классический пример из документации Hibernate:
from Cat as cat
left join cat.kittens as kitten
with kitten.bodyWeight > 10.0
В вашем случае это будет:
select distinct u from SystemUser u
join u.userGroups g
join u.organisations o
where 3 in elements(g.permissions) and
o.id not in (?)
Я предполагаю, что объект Organization имеет поле id, и вы можете перейти в список идентификаторов.