2016-09-15 3 views
1

Was mit dem folgenden QueryDSL Code ist so falsch:QueryDSL: erwartet ZU, gefunden '('

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()); 

, dass ich eine Ausnahme wie diese:?

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 mit Spring-Boot 1.3.6 und 3.7.4 QueryDSL (JPA über Hibernate).

+0

Scheint im Zusammenhang mit [diese Frage] (http://stackoverflow.com/questions/18984611/querydsl-jpa-dayofyear-dayoughmonth-translation-to-hibernate), aber ich weigere mich zu glauben, Hibernate kann eine solche einfache Abfrage nicht analysieren. –

+0

Es sieht so aus, als wäre das Problem um endDate.plusDays (1) .atStartOfDay() - vielleicht versuchen Sie, zuerst zu berechnen, dann geben Sie den Wert? –

+0

DATE ist keine gültige JPQL-Funktion. Jede JPQL Referenz würde Ihnen sagen –

Antwort

2

Refuse wie ich kann es sieht aus wie using functions as arguments in hibernate aggregation functions ist verboten, zB: count (Datum (Feld)) funktioniert nicht mit Hibernate. Ach wie schade!

einfach jeden Aufruf einer anderen Funktion unter count() entfernt hat den Trick in meinem Fall, da die Ergebnisse die gleichen sind. Scheint wie ein Hibernate-Implementierungsproblem, da Timo auf die damit verbundene Frage hinweist, dass dies unter EclipseLink funktioniert.