如何翻译@Enumerated属性的名称?

时间:2011-05-16 07:33:44

标签: hibernate orm jpa

有两个EnumType:EnumType.ORDINALEnumType.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;
}

1 个答案:

答案 0 :(得分:1)

在JPA 2.0中无法完成。但它可以使用UserType在Hibernate中完成。但是你为什么要这样做。我已经考虑了你的字符串变量的参数,但是这个参数不适用于数据库中的任何字符串(varchar)列。还请考虑枚举可能会在JAVA代码中使用,因此长枚举字符串值也会出现问题。