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

Hibernate 6.3.1.Final适配MariaDB枚举类型注解问题求助

Hibernate 6.3.1.Final对接遗留数据库枚举类型适配方案

问题描述

  • 数据库以int(11)存储枚举时,Hibernate抛出“expecting #TINYINT”错误,修改@Column的columnDefinition为INTEGER或int2无效,且无法修改数据库列类型(避免破坏遗留代码)
  • 数据库以varchar(255)存储枚举时,使用@Enumerated(EnumType.STRING)注解,出现“found [varchar (Types#VARCHAR)], but expecting [enum ('active','inactive') (Types#ENUM)]”验证错误
  • 以上问题在Hibernate 6.0.1.Final中未出现

枚举类代码

import java.util.HashMap;
import java.util.Map;

public enum ActiveOrInactive {
    
    Active, Inactive;
    
    static final Map<String, ActiveOrInactive> _activeOrInactive = new HashMap<String, ActiveOrInactive>();
    static {
        for (ActiveOrInactive activeOrInactive : ActiveOrInactive.values()) {
            _activeOrInactive.put(activeOrInactive.toString(), activeOrInactive);
        }
    }
    
    public static Map<String, ActiveOrInactive> getPublishedStateTypes() {
        return _activeOrInactive;
    }
}

原JPA字段配置示例

@Column(name = "status", nullable = false)
@Enumerated(EnumType.STRING)
@Basic(optional=false)
private ActiveOrInactive status;

解决方案

1. 适配int(11)存储的枚举

Hibernate 6.3+对数值型枚举的映射校验更严格,默认会将其映射为TINYINT。要适配int(11),需显式指定列类型并关闭该字段的类型校验:

@Column(name = "status", nullable = false, columnDefinition = "int(11)")
@Enumerated(EnumType.ORDINAL)
@Basic(optional = false)
@Type(parameters = @Parameter(name = "disable_type_check", value = "true"))
private ActiveOrInactive status;

全局适配方案(所有数值枚举生效):在application.properties中添加配置
hibernate.type.enum.ordinal.disable_type_check=true

2. 适配varchar(255)存储的枚举

Hibernate 6.3+默认会将字符串枚举映射为数据库原生ENUM类型,而遗留库使用的是VARCHAR。需显式指定列类型并关闭类型校验:

@Column(name = "status", nullable = false, columnDefinition = "varchar(255)")
@Enumerated(EnumType.STRING)
@Basic(optional = false)
@Type(parameters = @Parameter(name = "disable_type_check", value = "true"))
private ActiveOrInactive status;

全局适配方案(所有字符串枚举生效):在application.properties中添加配置
hibernate.type.enum.string.disable_type_check=true

内容的提问来源于stack exchange,提问作者user2989397

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:00:06