将枚举类型 MySQL 映射到休眠实体枚举的架构验证异常



我目前在尝试将 MYSQL 枚举类型映射到我的 Hibernate JPA 枚举类型时遇到问题。我收到架构验证错误。 我在 Java 中有一个简单的枚举:

public enum Gender {
MALE,
FEMALE
}

MySQL 表中对应的列定义是:

`gender` enum('MALE','FEMALE') DEFAULT NULL,

此特定属性的实体类中的批注为:

@Enumerated(EnumType.STRING)
@Column(name = "gender", columnDefinition="enum('MALE','FEMALE')")
private Gender gender;

我收到一个错误:

架构验证:列 [gender] 中遇到错误的列类型 在表 [...] 中;找到 [枚举(类型#CHAR(],但期望 [enum('MALE','FEMALE')(类型#VARCHAR(]

我尝试不@Column注释中使用列定义,错误是:

架构验证:在 [gender] 列中遇到错误的列类型 表 [...];找到 [枚举 (类型#CHAR(],但期望 [varchar(255( (类型#瓦尔查尔(]

我还尝试按照以下说明编写自己的转换器:https://thoughts-on-java.org/hibernate-enum-mappings/#customizedMapping 但这也无济于事。

知道吗?

注意:当我使用 EclipseLink 时,对于相同的数据库定义,我的实体没有问题,也没有在 @Column 中显式定义我的 columnDefinition。当我删除EclipseLink时,我开始面临这个问题。该项目现在使用Spring Data JPA。正在使用休眠核心 5.3.14。

我们遇到了同样的问题,我们只需要将列定义添加到映射中:

@Basic
@Column(name = "stripe_setup_intent_status", columnDefinition = "enum('SUCCESS', 'FAILED', 'WAITING')")
@Enumerated(EnumType.STRING)
private SetupIntentStatus stripeSetupIntentStatus;

我们正在使用休眠5.6.15和春季2.7.9

最新更新