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.
См. Также