Spring Batch项目使用count查询抛出got '*'错误该如何解决?
问题解决办法
错误原因
你使用的EntityManager.createQuery()默认接收JPQL(Java持久化查询语言)语法语句,而非原生SQL,部分JPA实现(如高版本Hibernate)对JPQL的语法校验更严格,不允许直接写count(*),所以抛出该语法错误。
解决方案
有两种可直接落地的修改方式,任选其一即可:
- 方案1:调整JPQL语法,将所有查询语句中的
count(*)替换为count(m)(m为Match实体的别名,统计逻辑和count(*)完全一致)
修改后的查询示例:// 第一个查询修改后 em!!.createQuery( "select m.team1, count(m) from Match m group by m.team1", Array<Any>::class.java ) // 剩余两个查询同步将count(*)改为count(m)即可 - 方案2:如果要保留原生SQL写法,将所有调用
createQuery的地方改为createNativeQuery,不需要修改SQL语句内容,示例:em!!.createNativeQuery( "select m.team1, count(*) from Match m group by m.team1", Array<Any>::class.java )
补充验证点
修改后如果仍有报错,可以检查Match实体类的字段映射是否正确,确认team1、team2、matchWinner字段和实体属性名完全匹配,无拼写错误。
内容的提问来源于stack exchange,提问作者Mama
相关产品推荐
相关产品推荐

