Как отобразить Enum 0 в спящем режиме для идентификатора строки
У меня проблема с отображением значения Enum. В моем Bonus.class у меня есть свойство enum Type с классом enum BonusType. Вот как я определяю свой класс enum (просто определение enum, никакие методы или конструкторы не копируются):
public enum EavType
{
WORLDWIDE ("WORLDWIDE"),
SIMPLE ("SIMPLE"),
NOTVALID ("0");
}
Все идет нормально. Поскольку я получаю бонусный элемент типа "WORLDWIDE" или "SIMPLE" из БД, проблем не возникает, но когда я получаю бонус для базы данных с типом =0, я получаю ошибку:
Exception: java.lang.IllegalArgumentException: Unknown name value [0] for enum class [com.bosch.gam.commons.bo.remuneration.BonusType]
Проблема в том, что я не могу установить способ сохранения типа NOTVALID, данные, которые я получаю из базы данных, создаются из другого интерфейса, и они просто сохраняют его как 0. Я также должен уточнить, что столбец Тип в таблице Bonus - это VARCHAR2.
Теперь мой вопрос: интерпретирует ли Hibernate 0 как число? Как я могу это исправить?
1 ответ
Если вы не можете использовать AttributeConverters ( преобразователи атрибутов baaddung jpa), вы можете использовать тот же подход в своем компоненте. В вашем классе "Бонус":
- создайте новое поле типа String, например, dbEavType
- сопоставить это новое поле со столбцом базы данных "тип"
- реализует set и get этого нового поля, чтобы адаптировать строковое значение к значению перечисления EavType, выполняя ожидаемое преобразование (например, если установить "0" в dbEavType, тогда установить NOTVALID в поле eavType)
Это решение позволяет вам адаптировать значение по своему усмотрению и не нарушать другие уровни вашего приложения, которые могут продолжать использовать перечисление.