【发布时间】:2014-09-17 16:09:55
【问题描述】:
我有两个表,我们称它们为 Person 和 Interest。一个人可以有很多兴趣。我现在要做的是生成一个按他们拥有的兴趣数量排序的人员列表。我对每个人有多少兴趣不感兴趣,我只想让列表以这种方式排序(我仍然希望从查询中获得整个 Person 实体)
在普通的 SQL 中,这将是一个类似的查询:
SELECT p.*, COUNT(i.id) as cnt FROM person p, interest i WHERE p.id = i.person_id ORDER BY cnt DESC
但我不知道如何在 JPA 中获得这样的查询。我尝试了以下方法:
Join<Person, Interest> interests = rootPerson.join("interests", JoinType.LEFT);
criteriaQuery.orderBy(builder.desc(builder.count(interests)))
但这不会产生正确的数据。
我也尝试编写子查询,但我不确定如何在 ORDER by 子句中使用子查询。
有什么想法吗? 谢谢;)
【问题讨论】:
-
如果不对人员进行分组,您的 SQL 将如何工作?
标签: java sql jpa eclipselink aggregate