【问题标题】:JPA Query with subquery in ORDER clause在 ORDER 子句中带有子查询的 JPA 查询
【发布时间】: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


【解决方案1】:

您展示的 SQL 具有从 Interests 到 Person 的 1:1,因此我假设您的对象模型将有一个 Person 实体,该实体具有 1:M 返回到对集合“interests”的兴趣。如果是这样,JPQL 将是: “从 Person p order by size(p.interests) 中选择 p”。在 order by 子句中可能不允许直接使用大小,因此您可能必须使用“Select p, count(p.interests) as cnt from Person p order by cnt”来更紧密地匹配您的 SQL。如果这行得通,它可以很容易地转化为标准。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-03
    • 2015-02-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多