有两个EnumType:EnumType.ORDINAL
和EnumType.STRING
。然而,两者都有不利之处:
EnumType.ORDINAL: You must preserve the enum order.
EnumType.STRING: The column width is the max length of the enum names, which maybe very long.
相反,我想介绍枚举类型的缩写:
public Enum MonthEnum {
January("JAN"),
February("FEB"),
March("MAR"),
...;
String abbrev;
static Map<String, MonthEnum> abbrevs = new HashMap();
MonthEnum(String abbrev) {
this.abbrev = abbrev;
abbrevs.put(abbrev, this);
}
public static MonthEnum fromAbbrev(String abbrev) {
return abbrevs.get(abbrev);
}
}
@Entity
class Diary {
@Enumerated(ABBREV)
Month month;
}
答案 0 :(得分:1)
在JPA 2.0中无法完成。但它可以使用UserType在Hibernate中完成。但是你为什么要这样做。我已经考虑了你的字符串变量的参数,但是这个参数不适用于数据库中的任何字符串(varchar)列。还请考虑枚举可能会在JAVA代码中使用,因此长枚举字符串值也会出现问题。