Spring Boot 3.2.0迁移后JPA @Query布尔比较查询报错求助
解决Spring Boot 2.7.1迁移至3.2.0的JPQL语法错误问题
核心问题原因
Spring Boot 3.x默认适配Hibernate 6.x,该版本对JPQL语法规则做了严格化调整,原有的布尔字段IS TRUE写法不再被语法解析器支持,这是触发BadJpqlGrammarException的直接原因。
修复步骤
1. 修正JPQL查询语句
将Repository中的自定义查询替换为以下任意一种合法写法:
- 直接引用布尔字段(推荐,最简洁):
@Query("select t from Tutorial t where t.published") List<Tutorial> getTutorial();
- 使用等于判断:
@Query("select t from Tutorial t where t.published = TRUE") List<Tutorial> getTutorial();
2. 处理ANTLR版本不匹配警告
Eclipse中的ANTLR版本警告,是因为Hibernate 6依赖ANTLR 4.13.x,若项目或IDE存在旧版本ANTLR依赖,可在pom.xml中显式指定版本解决:
<dependency> <groupId>org.antlr</groupId> <artifactId>antlr4-runtime</artifactId> <version>4.13.1</version> </dependency>
3. 补充迁移注意事项
- 全面排查JPQL查询:Hibernate 6对JPQL语法校验更严格,隐式类型转换、关键字使用等场景都可能触发新的语法错误,需逐一检查所有自定义查询。
- 确认基础环境兼容性:Spring Boot 3.x要求JDK 17及以上,同时需确保第三方依赖已适配Spring Boot 3.x版本。
内容的提问来源于stack exchange,提问作者ajeshbaby
相关产品推荐
相关产品推荐

