我有一些属性,就像我的User对象上的枚举一样:
@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
我很困惑,这是怎么回事? hibernate是否足够智能来映射它?
答案 0 :(得分:1)
JPA规范定义了嵌入式枚举的行为,允许将它们存储为基于整数的序数,或者作为字符串表示。默认行为是将枚举存储为整数序数。您可以通过@Enumerated
注释来控制此行为。在您的示例中,以下内容将导致JPA提供程序在DDL中生成varchar类型:
@Column(name = "user_status")
@Enumerated(STRING)
private UserStatus userStatus;
作为旁注,我认为将整数序数存储在数据库中是一个可怕的想法,因为如果重新排序/更改枚举成员,数据就会变成垃圾。
参考:JPA 2.0 Specification - 第11.1.16节