2014-02-26 64 views
0

我有以下類:如何在Hibernate @ Entity類中使用Enum成員?

@Entity 
class User 
{ 
    @Id @GeneratedValue 
    private long id; 

    private Language lang; //Language is an Enum of all languages 

    private Role role; //Role is an enum of user roles like admin, super-admin, etc 

} 

我的問題是:

1)我應該如何設計數據庫列用枚舉類型的工作?我應該使用varchar還是其他類型? (我正在使用MySQL)

2)本課程是開箱即用,還是我需要做額外的工作才能使用Enums?我需要能夠同時讀取和寫入枚舉值(例如,用戶可以改變他的語言)

+0

@Enum註釋 - 如果你想枚舉存儲爲字符串或整數你可以指定。 – Antoniossss

回答

2

您可以使用VARCHAR種類和@Entity類標記與@Enumerated枚舉成員和@Column註釋(以指向枚舉成員綁定到哪個數據庫表列)。

例如:

@Column(columnDefinition = "enum('BULGARIA','UNITED KINGDOM')") 
@Enumerated(EnumType.STRING) 
private Language lang; 

@Column(columnDefinition = "enum('ADMIN','USER')") 
@Enumerated(EnumType.STRING) 
private Role role; 
+0

這將與現有數據庫列一起工作,還是會嘗試創建它們?定義可能會在所有語言中變得有點長,有沒有其他方法? –

+0

我已經有數據庫列做順便說一句。我還需要指定@ColumnDef嗎? –

+0

簽出這個線程︰http://stackoverflow.com/questions/16078681/what-properties-does-column-columndefinition-make-redundant –