spring jpa @Query错误,期待CLOSE,发现'('附近

lev*_*evi 4 java spring spring-data spring-data-jpa

我有以下JPQL:

@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")
Run Code Online (Sandbox Code Playgroud)

当我添加时concat(b.id, '@', s.user.id),它告诉我:

org.hibernate.hql.internal.ast.QuerySyntaxException:期待CLOSE,找到'('靠近第1行,在org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74)〜[hibernate-core- 5.1.0.Final.jar:5.1.0.Final] at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91)〜[hibernate-core-5.1.0.Final.jar:5.1 org.hibernate上org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:288)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final]的.0.Final] org.hibernate.hql.internal.ast.QueryTranslatorImpl中的.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final].在org.hibernate.engine.query.spi.HQLQueryPlan编译(QueryTranslatorImpl.java:142)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final].(HQLQueryPlan.java:115)〜[ hibernate-core-5.1.0.Final.jar:5.1.0.Final]在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:76)〜[hibernate-core-5.1.0.Final.罐 :org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final] atg的5.1.0.Final] .hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:302)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final] org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java: 240)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final] org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1907)~ [hibernate-core-5.1.0.Final .jar:5.1.0.Final]在org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:291)〜[hibernate-entitymanager-5.1.0.Final.jar:5.1.0.Final]

Sto*_*ica 10

期待CLOSE,发现 (

这里的术语CLOSE指的是一个右括号).

看起来查询解析器不支持调用其中的另一个函数count(...).

换句话说,语法错误在这里:

SELECT su.id, su.nameCn, count(b.id), avg(s.rate), count(concat(b.id, '@', s.user.id))
                                                               ^
Run Code Online (Sandbox Code Playgroud)

也许你的意思是做某种连接,并计算那里的行?