2016-04-07 2 views
2

Ich habe folgende JPQL:Frühjahr JPA @Query Fehler, erwartet ZU, gefunden '(' in der Nähe von

@Query("SELECT su.id, su.nameCn, count(b.id), avg(s.rate), count(concat(b.id, '@', s.user.id)) " 
      + "FROM S su, B b, S s where b.st.id = su.id and s.bd.id = b.id and su.mt.id = ?1 group by su.id") 

Als ich concat(b.id, '@', s.user.id) hinzufügen, es zeigt mir:

org.hibernate.hql. internal.ast.QuerySyntaxException: erwartet CLOSE, found '(' nahe Zeile 1, bei org.hibernate.hql.internal.ast.QuerySyntaxException.convert (QuerySyntaxException.java:74) ~ [hibernate-core-5.1.0.Final .jar: 5.1.0.Final] bei org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException (ErrorCounter.java:91) ~ [hibernate-core-5.1.0.Final.jar: 5.1.0.Final] bei org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse (QueryTranslatorImpl.java:288) ~ [Hibernate-Core-5.1. 0.Final.jar: 5.1.0.Final] bei org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile (QueryTranslatorImpl.java:187) ~ [Hibernate-Core-5.1.0.Final.jar: 5.1. 0.Final] bei org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile (QueryTranslatorImpl.java:142) ~ [Hibernate-Core-5.1.0.Final.jar: 5.1.0.Final] bei org. hibernate.engine.query.spi.HQLQueryPlan. (HQLQueryPlan.java:115) ~ [Hibernate-Core-5.1.0.Final.jar: 5.1.0.Final] bei org.hibernate.engine.query.spi.HQLQueryPlan . (HQLQueryPlan.java:76) ~ [Hibernate-Core-5.1.0.Final.jar: 5.1.0.Final] bei org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan (QueryPlanCache.java: 150) ~ [Winterschlaf-Kern-5. 1.0.Final.jar: 5.1.0.Final] bei org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan (AbstractSessionImpl.java:302) ~ [Hibernate-Core-5.1.0.Final.jar: 5.1.0.Final] bei org.hibernate.internal.AbstractSessionImpl.createQuery (AbstractSessionImpl.java:240) ~ [Hibernate-Core-5.1.0.Final.jar: 5.1.0.Final] bei org.hibernate.internal.SessionImpl.createQuery (SessionImpl.java:1907) ~ [Hibernate-Core-5.1.0.Final.jar: 5.1.0.Final] bei org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery (AbstractEntityManagerImpl.java: 291) ~ [Winterschlaf- EntityManager-5.1.0.Final.jar: 5.1.0.Final]

+0

Es scheint, dass Sie keine Funktionsaufrufe innerhalb von 'count()' verschachteln dürfen. – OrangeDog

Antwort

3

SCHLIEßEN erwartet, fand (

Der Begriff SCHLIESSEN bezieht sich hier auf eine schließende Klammer, ).

Es scheint, dass der Abfrageparser nicht den Aufruf einer anderen Funktion innerhalb der count(...) unterstützt.

Mit anderen Worten, die Syntaxfehler hier:

SELECT su.id, su.nameCn, count(b.id), avg(s.rate), count(concat(b.id, '@', s.user.id)) 
                  ^

Vielleicht meinen Sie irgendeine Art von beitreten zu tun, und die Zeilen dort zu zählen?

+0

ja, was ich genau will ist count (concat (b.id, '@', s.user.id)).Wenn ich nicht so schreiben kann, gibt es einen Weg zu diesem Format – levi

+0

Was Sie wollen, macht keinen Sinn. Die Concat-Funktion ändert die Anzahl der Zeilen nicht. – OrangeDog

+0

Wenn ich nur b.id zähle, gibt es mir 4 Datensätze, wenn ich zähle (concat (b.id, '@', s.user.id)), macht das eigentlich b.id und s.user.id als eindeutiger Schlüssel, ich werde 2 Datensätze erhalten, verengte Suchergebnisse – levi

0

Das Problem besteht darin, dass sowohl die Zähl- als auch die Verkettungsfunktion zusammen verwendet werden.

Wenn Sie Ihre Abfrage ohne count() wie unten schreiben, sollte funktionieren. Dies dient nur zum Testen, um herauszufinden, wer genau das Problem verursacht.

Versuchen Sie, Abfrage unterschiedlicher Art mit Anzahl und verketten seperat.

...concat(b.id, '@', s.user.id).... 
+0

ja, ich habe test wenn nur zählen (b.id), es funktioniert. aber eigentlich will ich zählen (concat (b.id, '@', s.user.id)), wenn ich concat hinzufüge, zeigt es mir Fehler. Wissen Sie also, wie man ein Format wie diese Zahl (concat (b.id, '@', s.user.id)) im Frühjahr schreibt – levi

Verwandte Themen