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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:18:03