我有一些属性,例如用户对象上的枚举:
@Column(name = "user_status")
private UserStatus userStatus;
其中UserStatus为:
public enum UserStatus {
NONE(0),
MEMBER(1),
PENDING(2);
private long enumValue;
UserStatus(long permissionValue) {
this.enumValue = permissionValue;
}
public long getEnumValue() {
return enumValue;
}
public void setEnumValue(long enumValue) {
this.enumValue = enumValue;
}
}
在数据库(mysql)中,UserStatus列为:
user_status int(11) NOT NULL
我很困惑,这怎么运作?休眠足够聪明来映射吗?
最佳答案
JPA规范定义了嵌入式枚举的行为,允许将它们存储为基于整数的序数或字符串表示形式。默认行为是将枚举存储为整数序数。您可以通过@Enumerated
注释控制此行为。在您的示例中,以下操作将导致您的JPA提供程序在DDL中生成varchar类型:
@Column(name = "user_status")
@Enumerated(STRING)
private UserStatus userStatus;
附带说明一下,在我看来,将整数序数存储在数据库中是一个可怕的想法,因为如果重新排序/更改枚举成员,则数据将变成垃圾。
参考:JPA 2.0 Specification-第11.1.16节