【发布时间】:2019-12-01 10:16:06
【问题描述】:
我想使用 JPA 实现这个 JPQL 查询:
String hql = "SELECT new org.plugin.service.PaymentTransactionsDeclineReasonsDTO(count(e.id) as count, e.status, e.error_class, e.error_message) " +
" FROM " + PaymentTransactions.class.getName() + " e " +
" WHERE e.terminal_id = :terminal_id AND (e.createdAt > :created_at) " +
" AND (e.status != 'approved') " +
" GROUP BY e.error_message " +
" ORDER BY count DESC";
但我收到错误:Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting OPEN, found 'DESC' near line 1, column 334 [SELECT new org.plugin.service.PaymentTransactionsDeclineReasonsDTO(count(e.id) as count, e.status, e.error_class, e.error_message) FROM org.datalis.plugin.entity.PaymentTransactions e WHERE e.terminal_id = :terminal_id AND (e.createdAt > :created_at) AND (e.status != 'approved') GROUP BY e.error_message ORDER BY count DESC]
按数量排序的正确方法是什么?
【问题讨论】:
-
不要为列指定别名
count,因为它是 SQL 中的关键字。将其替换为不同的名称,可能是amount或其他名称。在SELECT块和ORDER BY子句中替换它。读取count时,SQL 将期待一个左括号!count(e.id) as count应该是count(e.id) as amount和ORDER BY count DESC应该是ORDER BY amount DESC。
标签: java jpa jpa-2.0 jpql jpa-2.1