hibernate - Как аннотировать свойство как перечисление с полем - PullRequest
4 голосов
/ 28 октября 2009

Как мне отобразить перечисление с полем в нем?

public enum MyEnum{
HIGHSCHOOL ("H"), COLLEGE("C")
private int value;
public MyEnum getInstance(String value){...}
}

@Entity
public class MyEntity {
@Enumerated(...)
private MyEnum eduType;
}

Как аннотировать, чтобы значения H, C сохранялись в базе данных? Если я сохраню @Enumerated(EnumType.STRING), HIGHSCHOOL вместо H будет храниться в базе данных. Если я использую EnumType.ORDINAL, 1 вместо H будет храниться в базе данных. Пожалуйста, предложите решение.

Ответы [ 2 ]

3 голосов
/ 28 октября 2009

Нет встроенного способа сделать это в Hibernate. Вы можете написать UserType , чтобы сделать это для вас, если хотите.

Это хорошее начало, но вам нужно заменить реализации nullSafeSet() и nullSafeGet() для хранения вашего кода перечисления (например, 'H' / 'C' / что у вас есть) и вернуть соответствующий экземпляр enum на его основе.

Если у вас есть более одного типа перечисления, для которого вам нужно сделать это, вы можете реализовать интерфейс ParameterizedType для передачи типа перечисления в качестве параметра или использования отражения для извлечения «кода», пока методы доступа доступны назван последовательно.

0 голосов
/ 06 ноября 2009

Спасибо ChssPly76 за решение. Я реализовал тип пользователя, и он работает хорошо. Фактически, в сообществе hibernate есть пример сохранения значения / токена в перечислении. Нажмите здесь: StringValuedEnum

...