Использование аннотаций Hibernate для сохранения пользовательского значения для атрибута Enumerated - PullRequest
9 голосов
/ 17 февраля 2011

У меня есть много перечислений Java, которые я сохраняю с помощью Hibernate. Насколько я знаю, существуют два разных стандартных способа сохранения этих перечислений:

@Enumerated(EnumType.ORDINAL)

Это значение по умолчанию, и оно просто сохраняет порядковый номер из перечисления.

@Enumerated(EnumType.STRING)

Здесь сохраняется имя перечисляемого значения.

До сих пор они работали нормально, но теперь у меня есть новое перечисление, в котором я хочу сохранить пользовательское значение из перечисления, которое не является ни порядковым, ни именем. Это возможно? Я искал вокруг и видел много людей, спрашивающих, как сохранить имя, что легко сделать с помощью EnumType.STRING, но я хочу сохранить int, который можно использовать для сравнения в моих SQL-запросах. Я попытался переопределить toString (), чтобы вернуть мое пользовательское значение, но это не сработало.

Я вставлю мое перечисление java ниже. Я хочу сохранить член типа int из перечисления.

Заранее спасибо!

public enum Permission {
    VIEW (4),
    CHANGE(6),
    FULL(7);

    private int value;

    Permission(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

Ответы [ 2 ]

5 голосов
/ 17 февраля 2011

Вы можете реализовать UserType с желаемым поведением и настроить Hibernate для использования его с аннотацией @Type.

См., Например, UserType для сохранения TypesafeПеречисление с колонкой VARCHAR .

4 голосов
/ 17 февраля 2011

Да, мне тоже не хватает решения JPA.

Обходной путь:

  private int permissionValue;
  private transient Permission permission;

Затем преобразуйте в получатель / установщик разрешения.

Может быть, выТакже необходимо реализовать некоторые методы жизненного цикла?(Я не уверен.) http://download.oracle.com/docs/cd/B32110_01/web.1013/b28221/undejbs003.htm#BABIAAGE

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