Spring Batch项目中HSQL使用COUNT(*)报标识符错误如何解决
问题原因
你当前调用的em.createQuery()方法接收的是JPQL(Java持久化查询语言)语句,而非原生SQL语句,HSQL对应的JPQL实现不支持直接在COUNT函数中传入*符号,所以触发了语法错误。
解决方案
下面两种方案二选一即可:
- 方案1:按照JPQL规范改写COUNT写法(最推荐)
直接将COUNT()替换为COUNT(实体别名)即可,和COUNT()效果完全一致,都是统计分组后的行总数,修改后的查询代码如下:em.createQuery("SELECT m.team1 , COUNT(m) FROM match m GROUP BY m.team1",Objects::class.java) - 方案2:使用原生SQL查询
如果你需要保留COUNT(*)的写法,可以改用原生SQL查询方法,替换createQuery为createNativeQuery即可:em.createNativeQuery("SELECT m.team1 , COUNT(*) FROM match m GROUP BY m.team1",Objects::class.java)
额外注意事项
match是SQL标准保留字,你直接用作实体/表名可能会后续触发其他语法报错,建议给对应的实体补充表名注解规避保留字冲突:
@Table(name = "`match`") @Entity class Match { // 原有实体逻辑 }
内容的提问来源于stack exchange,提问作者Mama
相关产品推荐
相关产品推荐

