我有以下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")
当我添加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] 在org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final] 在org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:288)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final] 在org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final] 在org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)〜[hibernate-core-5.1.0.Final.jar:5.1.0.Final] 在org.hibernate.engine.query.spi.HQLQueryPlan。(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.jar: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] 在org.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]
答案 0 :(得分:9)
期待CLOSE,找到
(
此处的CLOSE一词指的是结束括号)
。
看起来查询解析器不支持在count(...)
内调用另一个函数。
换句话说,语法错误在这里:
SELECT su.id, su.nameCn, count(b.id), avg(s.rate), count(concat(b.id, '@', s.user.id))
^
也许你的意思是做某种连接,并计算那里的行?
答案 1 :(得分:0)
问题是同时使用count和concatenate函数。
如果你编写没有count()的查询,如下所示,应该可行。 这只是为了测试知道究竟是谁造成了问题。
尝试使用count以不同方式编写查询并单独连接。
...concat(b.id, '@', s.user.id)....