Как отобразить Enum 0 в спящем режиме для идентификатора строки - PullRequest
0 голосов
/ 19 ноября 2018

У меня проблема с отображением значения 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. Я также должен уточнить, что столбец Тип в таблице Бонус VARCHAR2.

Теперь мой вопрос: интерпретирует ли Hibernate 0 как число? Как я могу это исправить?

1 Ответ

0 голосов
/ 20 ноября 2018

Если вы не можете использовать AttributeConverters ( преобразователи атрибутов baeldung jpa ), вы можете использовать тот же подход в своем bean-компоненте.В вашем классе "Бонус":

  • создайте новое поле типа String, например, dbEavType
  • , сопоставьте это новое поле со столбцом базы данных "тип"
  • реализуетустановить и получить это новое поле, чтобы адаптировать строковое значение к значению перечисления EavType, выполняя ожидаемое преобразование (например, если установить значение 0 в dbEavType, а затем установить NOTVALID в поле eavType)

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

...