2013-06-24 78 views
5

我正在使用JPA 2.1。我想創建mysql枚舉類型列如:gender enum('male','female')。我的枚舉類是無法從JPA實體生成MySql中的枚舉類型

public enum Gender { 
    MALE, 
    FEMALE 
} 

在JPA實體類

@Enumerated 
private Gender gender;//generate int type column 

而且

@Enumerated(EnumType.STRING) 
private Gender gender; //generate varchar type column. 

有沒有辦法在MySQL中生成枚舉類型的列?

+1

您可能想試試這個 - http://stackoverflow.com/a/8710305/738746 –

回答

6

使用以下代碼:

public enum Gender { 
    MALE, FEMALE; 
} 

@Enumerated(EnumType.STRING) 
@Column(columnDefinition = "ENUM('User', 'Moderator', 'Admin')") 
public Role role; 
} 
+0

這不僅不能編譯,而且它混合了'Gender'和'角色「,因此不回答問題,也不解釋任何事情。爲什麼人們會讚揚這一點? –

+0

雖然這個例子是粗心的放在一起,但這是我能夠發現的唯一答案,顯示瞭如何使用JPA將枚舉映射到實際的SQL ENUM類型,而不是將枚舉值存儲爲不安全的數字或字符串類型。 – UncleBob

+0

enum類型ANSI是否兼容?是在標準的SQL中定義的枚舉,還是僅適用於MySQL?在這種情況下:這種解決方案不是將數據庫表(和DBMS)與'@ Entity'類(我稱之爲'Person'或類似的東西)耦合起來嗎? –

0

如果要在數據庫中使用字符串枚舉值,則基於數據庫服務器的列類型必須爲varchar。其實我不清楚I want to genrate mysql enum type column。但是,如果u想以顯示輸出MALEmale,參考如下:

public enum Gender { 
    FEMALE("female"), MALE("male"); 

    private String label; 

    private Gender(String label) { 
     this.label = label; 
    } 

    public String getLabel() { 
     return label; 
    } 
} 

測試CALSS

public static void main(String args[]) { 
    System.out.println(Gender.MALE) 
} 

輸出:雄性

+0

mysql有一個「enum」數據類型:http://dev.mysql.com/doc/refman/5.7/en/enum.html – Creature