#java #hibernate #jpa #enums
Вопрос:
У меня есть модель сущности с внутренним пользовательским полем перечисления, например:
@Entity
@Table(name = "TABLE_CUSTOM")
public class CustModel{
@Enumerated(EnumType.STRING)
@Column(name = "CUSTOM", length = 3, nullable = false)
private EnumCustom enumCustom;
}
public enum EnumCustom{
A, B, C, D, UNK;
}
//UNK расшифровывается как НЕИЗВЕСТНЫЙ
В этой таблице TABLE_CUSTOM есть столбец, содержащий возможные значения для полей enumCustom, но бывают случаи, когда могут появиться некоторые недопустимые значения (например, E, F), в этом случае я хотел бы установить это поле как UNK(неизвестно). Есть ли способ с помощью аннотации в этом поле или чего-то подобного решить эту проблему?
Комментарии:
1. Вы можете использовать конвертер атрибутов .
2. На самом деле, мое приложение развернуто на WebSphere 9, который, похоже, неправильно читает аннотацию @Converter, такого поведения не происходит в JBoss, на котором работает аннотация.
Ответ №1:
Вы можете использовать @postLoad для заполнения второго поля правильным значением перечисления:
@Entity
@Table(name = "TABLE_CUSTOM")
public class CustModel{
// populated with database String value via ORM framework
private String enumDatabase;
private EnumCustom enumCustom;
@PostLoad
private EnumCustom enumCustom;
enumCustom = EnumCustom.valueOf(enumDatabase);
}
}
public enum EnumCustom{
A, B, C, D, UNK;
public static void fromValue(String enumDatabase) {
for(EnumCustom enumCustom : values()) {
if (enumCustom.name().equals(enumDatabase) {
return enumCustom;
}
}
return EnumCustom.UNK;
}
}