2012-05-23 150 views
0

我有一些特性是枚舉就像我的用戶對象上:我的休眠枚舉工作正常/穩定的設置?

@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

JPA規範定義了嵌入式枚舉的行爲,允許將其存儲爲基於整數的序號或作爲字符串表示。默認行爲是將枚舉存儲爲整數序數。您可以通過@Enumerated註釋來控制此行爲。在你的榜樣,下面會引起你的JPA提供程序生成您的DDL一個varchar類型:

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

作爲一個側面說明,它在我的存儲整序在數據庫認爲一個可怕的想法,因爲數據如果您重新排序/更改枚舉成員,則會變成垃圾。

參考:JPA 2.0 Specification - 第11.1.16

+0

我明白了,但在我上面的代碼中,我明確設置的值,這樣我就可以控制它嗎?即我會設定一些價值幫助嗎? – Blankman

+0

嗯,你正在設定***值。這是爲了你添加的屬性,而不是JPA會知道的屬性。 – Perception