HQL: элемент одной коллекции находится в другой коллекции? - PullRequest
11 голосов
/ 09 декабря 2010

Я хочу проверить, содержится ли хотя бы один элемент коллекции (u.organisations) в другой коллекции (? = исключенные организации):

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

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Это классический пример из документации 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 (?)

Я предполагаю, что у сущности организации есть поле idВы можете перейти в список идентификаторов.

0 голосов
/ 09 декабря 2010

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

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