我的休眠枚举是否正常/稳定设置?

时间:2012-05-23 03:54:17

标签: java hibernate

我有一些属性,就像我的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是否足够智能来映射它?

1 个答案:

答案 0 :(得分:1)

JPA规范定义了嵌入式枚举的行为,允许将它们存储为基于整数的序数,或者作为字符串表示。默认行为是将枚举存储为整数序数。您可以通过@Enumerated注释来控制此行为。在您的示例中,以下内容将导致JPA提供程序在DDL中生成varchar类型:

@Column(name = "user_status")
@Enumerated(STRING)
private UserStatus userStatus;

作为旁注,我认为将整数序数存储在数据库中是一个可怕的想法,因为如果重新排序/更改枚举成员,数据就会变成垃圾。

参考:JPA 2.0 Specification - 第11.1.16节