Реализовать запрос JPA с помощью COUNT и SUM - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу реализовать запрос JPA, используя этот запрос SQL:

String hql = "SELECT DATE(date) AS Date, SUM(volume) AS amount, COUNT(*) AS number_of_transactions " + 
                " FROM " + PaymentTransactionsDailyFacts.class.getName() + " WHERE (date BETWEEN :start_date AND :end_date )" + 
                " GROUP BY DATE(date)";

Я пробовал это:

String hql = "SELECT DATE(e.date) AS Date, SUM(e.volume) AS amount, COUNT(e.*) AS count " + 
                " FROM " + PaymentTransactionsDailyFacts.class.getName() + " e WHERE (date BETWEEN :start_date AND :end_date )" + 
                " GROUP BY DATE(date)";

Но я получаю ошибку:

expecting IDENT, found '*' near line 1, column 63 [SELECT DATE(e.date) AS Date, SUM(e.volume) AS amount, COUNT(e.*) AS count  FROM .......PaymentTransactionsDailyFacts e WHERE (date BETWEEN :start_date AND :end_date ) GROUP BY DATE(date)]

Как правильно реализовать этот запрос в JPA?

1 Ответ

0 голосов
/ 08 февраля 2019

JPQL не знает, что означает *.Вместо этого вы просто сказали бы e, а не e.*.

String hql = "SELECT DATE(e.date) AS Date, SUM(e.volume) AS amount, COUNT(e) AS count " 
              + " FROM " + PaymentTransactionsDailyFacts.class.getName()
              + " e WHERE (date BETWEEN :start_date AND :end_date )" 
              + " GROUP BY DATE(date)";

Это связано с тем, что JPQL работает с Java сущностями.Обратите внимание, что вы говорите из имени класса, а не из таблицы.У объектов нет подстановочных знаков, указывающих какое-либо поле в классе.Вместо этого вы указываете, что сам объект не является нулевым, чтобы сказать, что есть строка.

Синтаксис e.* в SQL по сути (хотя, возможно, и не буквально) говорит о том, что в этой строке существует хотя бы один ненулевой столбец.Потому что у него больше нет прямого способа сказать, что ряд существует.Но у JPQL есть способ сказать, что объект существует.Это базовая проверка Java, не равная NULL.Таким образом, в JPQL вы делаете это способом Java (хотя и в синтаксисе JPQL), а не способом SQL.

См. Также

...