2016-09-15 6 views
1

Что не так с помощью следующего кода QueryDSL:QueryDSL: ожидая CLOSE, нашел '('

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)] 

I» m с использованием Spring Boot 1.3.6 и QueryDSL 3.7.4 (JPA через спящий режим).

+0

Похоже на [этот вопрос] (http://stackoverflow.com/questions/18984611/querydsl-jpa-dayofyear-dayofmonth-translation-to-hibernate), но я отказываюсь верить, что hibernate не может разобрать такой простой запрос. –

+0

Похоже, что проблема вокруг endDate.plusDays (1) .atStartOfDay() - может быть, попытается вычислить, что сначала передается значение? –

+0

DATE не является допустимой функцией JPQL. Любая ссылка JPQL сообщила бы вам об этом –

ответ

2

Отказ, как мне кажется, using functions as arguments in hibernate aggregation functions запрещен, например: count (дата (поле)) не работает в спящем режиме. Какой облом!

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

 Смежные вопросы

  • Нет связанных вопросов^_^