Hibernate предоставляет аннотацию @Enumerated
, которая поддерживает два типа сопоставления Enum
с использованием ORDINAL
или STRING
.Когда мы отображаем с помощью EnumType.STRING
, оно принимает «имя» Enum
, а не toString()
представление Enum.Это проблема в сценариях, где столбец базы данных состоит только из одного символа.Например, у меня есть следующее Enum:
public enum Status{
OPEN{
@Override
public String toString(){
return "O";}
},
WAITLIST{
@Override
public String toString(){
return "W";}
},
COMPLETE{
@Override
public String toString(){
return "C";}
}
}
Когда я сохраняю enum Status.OPEN
, используя @Enumerated(EnumType.STRING)
, значение, которое Hibernate пытается сохранить в базе данных, - OPEN.Однако мой столбец базы данных состоит только из одного символа и, следовательно, он генерирует исключение.
Один из способов решения этой проблемы - изменить тип Enum для хранения отдельных символов (например, STATUS.O
, STATUS.W
вместоSTATUS.OPEN
, STATUS.WAITLIST
).Однако это снижает читабельность.Любые предложения по сохранению читабельности, а также отображение Enum в один символьный столбец?
Спасибо.