Hibernate 6查询验证失败求助(Spring Boot 3.1迁移)
Hibernate 6.2中JPQL类型校验严格化导致查询报错的原因
- Hibernate 6.2对JPQL的类型校验机制做了大幅收紧,彻底摒弃了5.6版本里的宽松兼容逻辑,现在会严格遵循JPQL规范要求的类型匹配规则。
- 在Hibernate 5.6中,框架会自动对字符串类型字段和数值类型常量做隐式类型转换,比如把Integer类型的
1自动转成字符串'1'来匹配code字段的String类型,但这种隐式转换在6.2版本中被完全移除了。 - 你的
code字段映射为String类型(对应数据库char(1)),当JPQL查询里直接用数值1和它比较时,6.2会严格校验两者的类型一致性,发现String与Integer类型不匹配,就抛出类型转换错误。 - 添加
@JdbcType(CharJdbcType.class)无效,是因为这个注解仅负责Java类型和数据库JDBC类型的映射逻辑,不影响JPQL查询层面的类型校验规则。 - 改成字符串常量
'1'后,常量类型和字段类型完全匹配,查询就能正常执行,这也是JPQL规范里要求的正确写法——查询常量的类型必须和实体字段类型保持一致。
内容的提问来源于stack exchange,提问作者Bapt_
相关产品推荐
相关产品推荐

