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

Spring Boot 3.2.1升级后枚举字段Schema校验错误问题

问题解决:Spring Boot 3.2.1枚举字段Schema校验错误

问题原因

升级Spring Boot到3.2.1并切换javax.persistence到jakarta.persistence后,Hibernate 6.x(Spring Boot 3.x默认依赖)对MySQL枚举类型的映射行为发生了变化:

  • 旧版Hibernate 5.x中,@Enumerated(EnumType.STRING)默认将枚举映射为MySQL的VARCHAR类型
  • Hibernate 6.x默认会将该注解的枚举映射为MySQL原生ENUM类型,而你的数据库中cui_queue表的status列仍是VARCHAR,因此触发Schema校验不匹配错误。

解决方案

方案1:指定实体类字段的列类型为VARCHAR

直接在枚举字段的@Column注解中明确指定列类型为VARCHAR,覆盖Hibernate的默认行为:

@Enumerated(EnumType.STRING)
@Column(name = "status", columnDefinition = "VARCHAR(50)")
private CuiDocumentStatus status;

方案2:全局禁用原生ENUM映射

通过配置文件全局设置Hibernate对所有枚举都使用VARCHAR类型,无需修改每个实体类:

  • application.properties:
spring.jpa.properties.hibernate.type.enum.use_native_enum=false
  • application.yml:
spring:
  jpa:
    properties:
      hibernate:
        type:
          enum:
            use_native_enum: false

方案3:修改数据库列类型为MySQL ENUM

如果希望改用数据库原生ENUM类型,执行以下SQL语句修改列结构(注意枚举值要与Java枚举常量名一致):

ALTER TABLE cui_queue MODIFY COLUMN status ENUM('WAIT', 'WORK', 'LOCK') NOT NULL;

若你的JPA命名策略配置为小写转换,需将枚举值改为'wait','work','lock'以匹配Hibernate的期望

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:34:51