You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HQL查询报错:unexpected AST node: COUNT 问题求助

解决HQL查询的QuerySyntaxException错误

错误原因分析

你遇到的QuerySyntaxException主要由两个语法问题导致:

  • HAVING子句缺少布尔判断:HAVING子句必须返回布尔值,你只写了聚合函数COUNT(...),没有指定比较规则(比如等于某个数值),解析器无法识别合法条件。
  • SELECT与FROM之间缺少空格:原查询中SELECT new com.model.CompanyInfoMapping(c.company_id, c.company_name)的结尾直接拼接FROM,没有空格,导致HQL解析器无法正确识别关键字。

修正后的查询语句

@Query("SELECT new com.model.CompanyInfoMapping(c.company_id, c.company_name)"
        + " FROM Company c Inner JOIN c.companyInfo ci INNER JOIN c.portfolioPrivate ppc"
        + " WHERE ppc.beschreibung_id IN ('1', '2') AND ppc.value = 'Yes'"
        + " GROUP BY c.company_id, c.company_name"
        + " HAVING COUNT(DISTINCT ppc.beschreibung_id) = 2")

关键修改说明

  • 补全关键字空格:在)"后添加空格,确保HQL解析器正确识别FROM关键字。
  • 简化WHERE逻辑:将两个OR条件合并为IN查询,减少重复代码,逻辑更清晰。
  • 修正HAVING条件:添加= 2的布尔判断,筛选同时满足beschreibung_id=1和beschreibung_id=2且value=Yes的公司;使用COUNT(DISTINCT ppc.beschreibung_id)避免同一公司同一条件重复计数。
  • 完善GROUP BY规则:根据HQL规范,SELECT中所有非聚合字段都要出现在GROUP BY中,因此添加c.company_name(部分JPA版本会强制要求这一步)。

内容的提问来源于stack exchange,提问作者Waleed Asif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:20:57