QuerySyntaxException произошло для JPA @Query для Distinct и Count - PullRequest
0 голосов
/ 01 марта 2020

Я использую приведенный ниже как запрос метода интерфейса 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

Есть ли другой способ записи DISTINCT / COUNT запрос в JPA или я что-то не так делаю? Пожалуйста, предоставьте мне несколько указателей.

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

Проблема связана с ключевым словом заказа в JPQL. Ожидается ключевое слово «by» после слова «order».

Кто бы ни читал это, старайтесь избегать ключевого слова "order" в выражении, ожидайте в конце, где вам действительно нужно выполнить оператор ORDER BY.

0 голосов
/ 01 марта 2020

Я думаю, что запрос будет работать, если вы измените его, как показано ниже -

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