Как перевести имя для @Enumerated свойств? - PullRequest
0 голосов
/ 16 мая 2011

Существует два типа 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.

Вместо этого я хотел бы ввести сокращение для типа enum:

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 Ответ

1 голос
/ 11 июня 2011

Это не может быть сделано в JPA 2.0. Но это можно сделать в Hibernate, используя UserType. Но почему ты хочешь? Я рассмотрел ваш аргумент для строкового варианта, но не применим ли этот аргумент к любому строковому (varchar) столбцу в базе данных. Также учтите, что enum, вероятно, будет использоваться в коде JAVA, поэтому длинное строковое значение enum также будет проблемой там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...