0

如果我有两个实体类,Groupand , andPerson之间是一对多的关系(即一个人最多可以属于一个组,一个组可以有很多人),我可以查询什么jpql/hql用于选择所有不在s中的s?GroupPersonPersonGroup

有点像select p from Group g inner join g.people p...的反面

4

2 回答 2

1

如果你想让所有不在给定组g中的人,它应该像

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

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

如果您想拥有所有根本不属于任何组的人

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

如果您想让所有人都不在任何组中,但 Person 中的外键可能有一个不为空但不属于现有组的组 id(例如,如果组被删除而不删除其中的人,而不是将他们移动到不同的组)

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

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

于 2012-05-16T13:16:08.840 回答
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)

更有效率?

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

于 2012-05-16T14:55:40.963 回答