Я пытаюсь получить перечисление из базы данных, и Hibernate не находит значение свойства и поэтому выдает следующее исключение java.lang.IllegalArgumentException: нет константы перечисления com.intrawa.qx.validator.models.entity.Group.CONFIGTAB.false
Проблема возникает, когда hibernate вызывает метод valueum перечисления: at java.lang.Enum.valueOf (Enum.java:238)
Я работаю с базой данных, где не могу изменить имена столбцов.
Например, посмотрите на код:
@Entity
@Data
@Table(name = "bm_host_groups")
public class Group {
@Enumerated(EnumType.STRING)
private CONFIGTAB configTab;
@AllArgsConstructor
private enum CONFIGTAB {
TRUE("true"),
FALSE("false");
@Getter @Setter
private String value;
}
}
В базе данных есть столбец с именем configTab с типом значения enum идва возможных значения («истина», «ложь»), когда в режиме гибернации вызывается значение значения («истина»), оно не находит ИСТИНА и выдает исключение.
Одно решение, которое я нашел, находится на этом посте: В чем причина java.lang.IllegalArgumentException: нет константного класса enum, хотя перебор значений () работает нормально?
Однако для этого требуется специальный метод, который принимает, например, «true»какзатем из базы данных капитализировать его, чтобы найти значение enum.
Я искал способ переопределить значение enum для valueof (), но в этом посте говорится, что это невозможно, и в основном предлагаем то же самое, что и первое решение,сделать собственный метод и сделать так, чтобы клиент вызывал его.Post: Переопределение valueof () и toString () в перечислении Java
Есть ли способ заставить hibernate вызывать пользовательский метод вместо valueof ()?