You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:35:10