Hibernate使用Enum映射数据库int字段出现类型转换错误如何解决
你当前的问题是同时混用Hibernate的XML映射配置和JPA注解配置,且XML中明确将枚举字段的类型指定为int,导致Hibernate尝试将实体类中的BugState枚举对象强制转为Integer类型,触发类型转换异常。
以下是两种可直接落地的解决方案,二选一即可:
方案1:保留XML映射配置
删掉实体类中state字段上的@Enumerated(EnumType.ORDINAL)注解,修改Bug.hbm.xml中的字段配置,指定枚举类型映射规则:
<property name="state" column="State"> <type name="org.hibernate.type.EnumType"> <param name="enumClass">Model.BugState</param> <!-- useNamed设为false表示用枚举序数存储,和你原来的需求一致 --> <param name="useNamed">false</param> </type> </property> <!-- status字段如果也是枚举,参照上面的规则配置即可 -->
方案2:全注解配置(更推荐新手使用)
直接删掉Bug.hbm.xml中state、status对应的两行<property>配置即可。你在实体类上加的@Enumerated(EnumType.ORDINAL)注解已经默认实现了「枚举转整数序数存储到数据库」的逻辑,不需要额外在XML中重复配置类型。
额外注意事项
使用EnumType.ORDINAL存储枚举时,不要随意调整枚举类中枚举项的顺序,否则会导致存量数据映射错乱。如果担心后续枚举有增改需求,可以将注解改为@Enumerated(EnumType.STRING),直接存储枚举的名称字符串,兼容性更强。
内容的提问来源于stack exchange,提问作者Java programmer dog
相关产品推荐
相关产品推荐

