JPA / Hibernate选择元素不在集合中

时间:2012-05-15 23:15:42

标签: hibernate jpa jpql

如果我有两个实体类GroupPersonGroupPerson之间存在一对多关系(即一个人)最多可以属于一个组,一个组可以有多个人),我可以使用什么jpql / hql查询来选择Person以内的所有Group

类似于select p from Group g inner join g.people p ...

的反面

2 个答案:

答案 0 :(得分:1)

如果你想让所有不在特定群体中的人g,那应该是

from Person p where p.group.id != :gid;

并将gid设置为给定组的ID。

如果你想让所有人都没有任何人

from Person p where p.group.id is null;

如果你想让所有不在al的组中的人,但是Person中的外键可能有一个不是null但不属于现有组的组ID(例如,如果该组是删除时不删除其中的人并且不将其移至其他组中)

from Person p where not exist (select 1 from Group g where g.id = p.group.id);

P上。 S.我的陈述适用于HQL,但对于JPQL,它应该或多或少相同。

答案 1 :(得分:1)

这有效:

select p from Person p where p not in (select pg from Group g inner join g.persons pg)

也许:

select p from Person p where not exists (select 1 from Group g where p member of g.persons)

效率更高?

无论如何......欢迎评论哪个更有效,但由于这两个“工作”,将问题标记为已回答。