Вот пример, который использует аннотации.
http://www.gabiaxel.com/2011/01/better-enum-mapping-with-hibernate.html
Он все еще основан на пользовательском типе пользователя. Четыре с половиной года спустя, и я до сих пор не знаю лучшего способа сделать это.
Как правило, я сохраняю свои значения перечисления в виде char / int, некоторого простого идентификатора, а затем использую переходный метод, который находит соответствующее перечисление по значению простого идентификатора, например
@Transient
public MyEnum getMyEnum() {
return MyEnum.findById(simpleId); //
}
и ...
public enum MyEnum {
FOO('F'),
BAR('B');
private char id;
private static Map<Character, MyEnum> myEnumById = new HashMap<Character, MyEnum>();
static {
for (MyEnum myEnum : values()) {
myEnumById.put(myEnum.getId(), myEnum);
}
}
private MyEnum(char id) {
this.id = id;
}
public static MyEnum findById(char id) {
return myEnumById.get(id);
}
public char getId() {
return id;
}
}
public enum Status
{
OPEN("O"),
WAITLIST("W"),
COMPLETE("C")
private String description;
private Status(String description)
{
this.description = description;
}
public String getDescription()
{
return description;
}
}
and then when you read it:
Status.OPEN.getDescription()