QueryDSL: ожидание CLOSE, найдено '('

Что плохого в следующем коде QueryDSL:

query.from(chat).where(
chat.datePosted.goe(startDate.atStartOfDay()).
and(chat.datePosted.lt(endDate.plusDays(1).atStartOfDay()))).    
groupBy(date(chat.datePosted)).
list(date(chat.datePosted), date(chat.datePosted).count());

что я получаю такое исключение:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '(' near line 1, column 41 [select date(chat.datePosted), count(date(chat.datePosted))
from com.test.model.Chat chat
where chat.datePosted >= ?1 and chat.datePosted < ?2
group by date(chat.datePosted)]

?

Я использую Spring Boot 1.3.6 и QueryDSL 3.7.4 (JPA через Hibernate).


person Mircea D.    schedule 15.09.2016    source источник
comment
Кажется, связано с этим вопросом, но я отказываюсь верить, что спящий режим не может анализировать такие простой запрос.   -  person Mircea D.    schedule 15.09.2016
comment
Похоже, проблема связана с endDate.plusDays (1) .atStartOfDay () - может быть, сначала попробуйте вычислить это, а затем передать значение?   -  person John Harris    schedule 15.09.2016
comment
DATE не является допустимой функцией JPQL. Любая ссылка на JPQL скажет вам это   -  person Neil Stockton    schedule 15.09.2016
comment
Возможно, вы правы, но я пробовал также простой старый concat, поддерживаемый самим queryDSL (или добавлением StringExpression, если на то пошло), и это тоже не работает, поэтому основная причина в другом.   -  person Mircea D.    schedule 16.09.2016
comment
@JohnHarris, нет, в конце концов, все сработало, см. Ответ.   -  person Mircea D.    schedule 16.09.2016


Ответы (1)


Как бы я ни отказывался, это похоже на использование функций в качестве аргументов в функциях агрегирования гибернации < / a> запрещено, например: count (date (field)) не работает с Hibernate. Какой облом!

Простое удаление любого вызова другой функции в count () помогло в моем случае, потому что результаты такие же. Похоже на проблему с реализацией Hibernate, поскольку Тимо упоминает в связанном вопросе, что это работает в EclipseLink.

person Mircea D.    schedule 15.09.2016