java - QuerySyntaxException : expecting CLOSE, 发现 '.'

标签 java jpa spring-data-jpa jpa-2.0 jpa-2.1

我想将此 SQL 查询重写为 JPQL 并使用 JPA Projection:

SELECT count(id) as count, status, error_class, error_message, id, settlement_status_raw 
FROM `payment_transactions` 
WHERE `payment_transactions`.`terminal_id` = 16 
AND (created_at > '2019-06-01 00:00:00.000000') 
AND (`payment_transactions`.`status` != 'approved') 
GROUP BY `payment_transactions`.`error_message`  ORDER BY count DESC

我试过这个:
@Query(value = "SELECT new org.plugin.service.PaymentTransactionsDeclineReasonsDTO(e.id, count(id) as e.count, e.status, e.error_class, e.error_message) " +
            " FROM payment_transactions e " +
            " WHERE e.terminal_id = :id AND (e.created_at > :created_at) " +
            " AND (e.status != 'approved') " +
            " GROUP BY e.error_message " +
            " ORDER BY e.count DESC")

但我得到错误:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '.' near line 1, column 96 [SELECT new org.plugin.service.PaymentTransactionsDeclineReasonsDTO(e.id, count(id) as e.count, e.status, e.error_class, e.error_message)  FROM payment_transactions e  WHERE e.terminal_id = :id AND (e.created_at > :created_at)  AND (e.status != 'approved')  GROUP BY e.error_message  ORDER BY e.count DESC]"}}

你能给我一些建议如何正确地用 JPQL 重写这个查询吗?

最佳答案

我同意 Mike.F e.count不是有效的表达式。
但该语句有更多问题:

  • e.id , e.status , e.error_class不是 GROUP BY 的一部分所以他们不能在选择中使用。要么将它们添加到 GROUP BY或使用聚合函数,如 MAXMIN .
  • 您不能在构造函数表达式中定义别名。
  • 关于java - QuerySyntaxException : expecting CLOSE, 发现 '.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57149382/

    相关文章:

    java - 我可以在 Glassfish(或任何应用程序服务器)上拦截对我的 WSDL 的调用吗?

    java - Hibernate自引用关系和延迟加载

    Jetty 中的 javax.naming.NameNotFoundException 但 Tomcat 中没有。怎么解决?

    java - 如何获取 Java Jersey 客户端请求的 URL?

    java - MediaMetadataRetriever.setDataSource( native 方法)导致 RuntimeException : status = 0xFFFFFFEA

    orm - JPQL/SQL : How to select * from a table with group by on a single column?

    hibernate - JPA 不是 Autowiring

    java - spring-data-jpa 依赖导致构建失败

    java - 是否可以将Map的值分为两种类型?

    java - 不要使用 spring jpa 从数据库获取信息