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

私は混乱しています、これはどのように機能していますか?休止状態はこれをマッピングするのに十分スマートですか?

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 に答える