Как отобразить 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)

Это решение позволяет вам адаптировать значение по своему усмотрению и не нарушать другие уровни вашего приложения, которые могут продолжать использовать перечисление.

Другие вопросы по тегам