【问题标题】:QuerySyntaxException occurred for JPA @Query for Distinct and CountJPA @Query for Distinct and Count 发生 QuerySyntaxException
【发布时间】:2020-06-13 21:01:33
【问题描述】:

我使用下面的作为 JpaRepository 接口方法查询

@Query("SELECT DISTINCT order.status, COUNT(*) FROM OrderEntity order WHERE order.customerNumber = ?1 GROUP BY order.status")

在应用程序启动期间,我收到以下异常 -

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: order near line 1, column 17 [SELECT DISTINCT order.status AS status, COUNT(*) AS count FROM debomitra.cmw.orders.entity.OrderEntity order WHERE order.customerNumber = ?1 GROUP BY order.status]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74)
    at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:297)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:155)
    at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:600)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:709)
    ... 116 more

还有其他方法可以在 JPA 中编写 DISTINCT/COUNT 查询还是我做错了什么? 请给我一些指示。

【问题讨论】:

    标签: spring-boot jpa spring-data-jpa microservices


    【解决方案1】:

    问题在于 JPQL 中的 order 关键字。它期望在“订单”之后有一个“by”关键字。

    阅读这篇文章的人尽量避免在语句中使用“order”关键字,期望在您真正需要发出 ORDER BY 语句的末尾。

    【讨论】:

      【解决方案2】:

      如果您像下面这样修改它,我认为查询将起作用-

      SELECT DISTINCT OrderEntity.status, COUNT(*) FROM OrderEntity WHERE OrderEntity.customerNumber = ?1 GROUP BY OrderEntity.status
      

      【讨论】:

        猜你喜欢
        • 2012-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-03
        • 2020-09-12
        • 2011-05-24
        • 1970-01-01
        • 2021-11-24
        相关资源
        最近更新 更多