我有一个使用MySQL原生枚举值的MySQL表:
CREATE TABLE users (
id int NOT NULL AUTO_INCREMENT,
status enum('PENDING', 'ACTIVE', 'INACTIVE') NOT NULL
);
我想通过JPA在Spring Boot中访问它,因此我将其建模为具有enum属性的实体。
public enum Status {
PENDING,
ACTIVE,
INACTIVE;
}
@Entity
@Table(name = "users")
public class User {
@Id
@Column
private int id;
@Column
@Enumerated(EnumType.STRING)
private Status status;
/* Getters, Setters,… */
}
启动应用程序时,我遇到ddl-auto
属性设置为validate
的情况,我期望模式验证会出错:
org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [status] in table [users]; found [enum (Types#CHAR)], but expecting [varchar(255) (Types#VARCHAR)]
在JPA中使用MySQL枚举必须做什么?
答案 0 :(得分:2)
要使Hibernate可以正确地与本机MySQL枚举列一起使用,您需要为它提供该列正确DDL的明确提示,而不是让它推迟类型。为此,您可以为实体中的列定义columnDefinition
:
public enum Status {
PENDING,
ACTIVE,
INACTIVE;
}
@Entity
@Table(name = "users")
public class User {
@Id
@Column
private int id;
@Column(columnDefinition = "ENUM('PENDING', 'ACTIVE', 'INACTIVE')")
@Enumerated(EnumType.STRING)
private Status status;
/* … */
}
如果您使用AttributeConverters将MySQL枚举映射到Java枚举,则这也适用。