通常在编写JPA规范的查询脚本时,在SELECT子句中,每一个返回项都可以为其指定一个别名,尤其是对于聚合函数,如下所示:
SELECT COUNT(app) count1,app.age FROM App app GROUP BY app.age HAVING count1> 10
其中count1就是用于代表COUNT(app)的别名,使用别名的方式,可以方便在Having子句中引用聚合函数COUNT(app)。
但JPA规范规定,仅仅允许第一层的返回项存在别名,若使用类似于对象创建的方式返回数据,则在其中嵌套的任何返回项都不允许存在别名,如下所示:
错误的写法:
SELECT NEW template.ResultApp(COUNT(app) count1,app.age) FROM App app GROUP BY app.age HAVING count1 > 10
正确写法:
SELECT NEW template.ResultApp(COUNT(app),app.age) FROM App app GROUP BY app.age HAVING COUNT(app) > 10