HQL: Является ли элемент одной коллекции в другой коллекции?

Я хочу проверить, содержится ли хотя бы один элемент коллекции (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

Ответ 1

Я думаю, вам нужен подзапрос, чтобы выразить его в SQL, поэтому в HQL также необходим подзапрос:

select u from SystemUser u 
where not exists (
    select 1 from UserGroup g where g.user = u and g not in (?)
)

Ответ 2

Это классический пример из документации 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, и вы можете перейти в список идентификаторов.