如何使用JPA将MySQL枚举映射到Java枚举?

如何使用JPA将MySQL枚举映射到Java枚举?,java,mysql,hibernate,jpa,spring-data-jpa,Java,Mysql,Hibernate,Jpa,Spring Data Jpa,我有一个使用MySQL本机枚举值的MySQL表: 创建表用户( id int非空自动增量, 状态枚举(“挂起”、“活动”、“非活动”)不为空 ); 我想通过JPA在Spring Boot中访问它,所以我将它建模为一个带有enum属性的实体 公共枚举状态{ 悬而未决的 活跃的, 不活跃的 } @实体 @表(name=“users”) 公共类用户{ @身份证 @纵队 私有int-id; @纵队 @枚举(EnumType.STRING) 私人身份; /*接球手、接球手*/ } 当我启动应用程序时,

我有一个使用MySQL本机枚举值的MySQL表:

创建表用户(
id int非空自动增量,
状态枚举(“挂起”、“活动”、“非活动”)不为空
);
我想通过JPA在Spring Boot中访问它,所以我将它建模为一个带有enum属性的实体

公共枚举状态{
悬而未决的
活跃的,
不活跃的
}
@实体
@表(name=“users”)
公共类用户{
@身份证
@纵队
私有int-id;
@纵队
@枚举(EnumType.STRING)
私人身份;
/*接球手、接球手*/
}
当我启动应用程序时,我体验到
ddl auto
属性设置为
validate
我预计模式验证会出错:

org.hibernate.tool.schema.spi.SchemaManagementException:模式验证:在表[users]的[status]列中遇到错误的列类型;找到[enum(Types#CHAR)],但应为[varchar(255)(Types#varchar)]


在JPA中使用MySQL枚举需要做什么?

要使Hibernate正确使用本机MySQL枚举列,您需要为该列提供正确DDL的明确提示,而不是让它延迟类型。可以通过为实体中的列定义以下内容来完成此操作:

公共枚举状态{
悬而未决的
活跃的,
不活跃的
}
@实体
@表(name=“users”)
公共类用户{
@身份证
@纵队
私有int-id;
@列(columnDefinition=“枚举('PENDING'、'ACTIVE'、'INACTIVE'))
@枚举(EnumType.STRING)
私人身份;
/* … */
}
如果您使用将MySQL枚举映射到Java枚举,这也适用