Spring Boot升级Hibernate 6后枚举查询出现NPE问题求助
问题原因分析
SpEL嵌套参数的类型解析逻辑变更:Hibernate 6对参数元数据的解析机制比Hibernate 5更严格,对于
:#{#criteria.enum_field}这种通过SpEL从对象中嵌套提取的枚举属性,无法正确关联到实体类中枚举字段的@Enumerated(EnumType.STRING)配置,导致无法找到对应的JdbcMapping实例,最终调用getJdbcValueBinder()时触发空指针异常。参数绑定底层逻辑重构:Hibernate 6重构了参数绑定和类型映射的底层实现,直接传入的枚举参数(如单独用
@Param声明的枚举参数)能被正确识别并绑定对应的类型映射,但嵌套SpEL提取的枚举属性会绕过正常的枚举类型解析流程,导致jdbcMapping为null。
临时解决思路
将嵌套的枚举属性单独提取为@Param参数,避免通过SpEL嵌套访问,示例如下:
@Query("from SomeEntity r where r.enum_field = :enumValue") Page<SomeEntity> search(@Param("criteria") TheCriteria criteria, @Param("enumValue") TheEnumType enumValue, Pageable pageable)
调用方法时直接传入criteria.getEnum_field()作为enumValue参数,这样Hibernate 6能正确识别枚举类型并绑定对应的JdbcMapping。
内容的提问来源于stack exchange,提问作者user3429660
相关产品推荐
相关产品推荐

