0

我有一些枚举属性,例如我的 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 足够聪明来映射这个吗?

4

1 回答 1

1

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

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

附带说明一下,在我看来,将整数序数存储在数据库中是一个可怕的想法,因为如果您重新排序/更改枚举成员,数据就会变成垃圾。

参考:JPA 2.0 规范- 第 11.1.16 节

于 2012-05-23T04:06:12.423 回答