JPA/Hibernate select 元素不在集合中



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

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

如果你想让所有不在给定组 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);

附言我的陈述是针对 HQL 的,但对于 JPQL,它应该或多或少是相同的。

这奏效了:

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)

效率更高?

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

最新更新