Java JPA JPQL:使用计数、分组依据和排序依据选择新建

Java JPA JPQL:使用计数、分组依据和排序依据选择新建,java,select,jpa,aggregate-functions,jpql,Java,Select,Jpa,Aggregate Functions,Jpql,有两个表/实体:AppleTree和Apples。一棵苹果树产0…n个苹果。每个苹果都是第二个表的一个实体/行,并引用生成它的苹果树(manytone) 我想就最高产的苹果树生成一份“高分”报告。应按计数列按降序排列: APPLE TREE | COUNT(A) --------------------- 10304 | 1000 72020 | 952 31167 | 800 为了处理这些结果,我创建了一个非实体bean,它组合了一个AppleTree对象和一个

有两个表/实体:
AppleTree
Apples
。一棵苹果树产0…n个苹果。每个苹果都是第二个表的一个实体/行,并引用生成它的苹果树(
manytone

我想就最高产的苹果树生成一份“高分”报告。应按计数列按降序排列:

APPLE TREE | COUNT(A)
---------------------
10304      | 1000
72020      | 952
31167      | 800
为了处理这些结果,我创建了一个非实体bean,它组合了一个AppleTree对象和一个长值(用于计数):

我想使用JPQL获取这种组合类型的行。我的方法基于
SELECT NEW
语法:

SELECT NEW foo.bar.AppleStats ( a.appleTree, COUNT(a) AS c )
FROM Apples a
GROUP BY a.appleTree
ORDER BY c DESC
不幸的是,它会产生相当多的错误消息。我认为一个问题是COUNT值的列别名。我使用它,因为我想按这个聚合值排序。无论我使用“COUNT(a)AS c”还是“COUNT(a)c”,都没有区别。它说这些参数不是用逗号分隔的。此外,“表达式无效,这意味着它不遵循JPQL语法”。最后,它说找不到与参数类型匹配的构造函数。”

有没有办法获取我的Applests结果行?或者我必须回归到本机查询?

尝试以下查询:

SELECT NEW foo.bar.AppleStats(a.appleTree, COUNT(a.appleTree))
FROM Apples a
GROUP BY a.appleTree
ORDER BY COUNT(a.appleTree) DESC
不幸的是,我现在没有一个JPA平台来测试它,但是上面的内容应该可以修复原始查询的语法问题aggregate函数出现两次,这是编写查询时非常常见的习惯用法,任何优秀的优化器都应该能够处理它,并且只执行一次操作

SELECT NEW foo.bar.AppleStats(a.appleTree, COUNT(a.appleTree))
FROM Apples a
GROUP BY a.appleTree
ORDER BY COUNT(a.appleTree) DESC