Перечисления
Перечисление – это набор констант, которые можно использовать в качестве значений атрибута сущности.
В Jmix перечисление – это тип Java enum, который реализует интерфейс EnumClass
и имеет поле id
типа Integer
или String
. Это поле хранится в базе данных вместо ordinal()
или name()
константы перечисления, что имеет следующие преимущества:
-
Вы можете переименовывать и переупорядочивать константы enum, и пока вы не измените идентификаторы, ваша модель данных будет совместима с содержимым базы данных.
-
Даже если база данных содержит значение, которое не соответствует ни одной из констант enum (это может произойти, если старая и новая версии приложения работают с одной и той же базой данных), сущность все равно может быть загружена с атрибутом enum, содержащим null. При стандартном JPA подходе загрузка такого экземпляра невозможна вообще.
Используйте дизайнер перечислений Studio для создания перечислений Jmix. |
Ниже приведен пример класса перечисления Jmix:
public enum CustomerGrade implements EnumClass<String> { (1)
BRONZE("B"), (2)
GOLD("G"),
PLATINUM("P");
private String id;
CustomerGrade(String value) {
this.id = value;
}
public String getId() { (3)
return id;
}
@Nullable
public static CustomerGrade fromId(String id) { (3)
for (CustomerGrade at : CustomerGrade.values()) {
if (at.getId().equals(id)) {
return at;
}
}
return null;
}
}
1 | Интерфейс EnumClass параметризуется типом поля Id (в данном случае String ). |
2 | Каждая константа enum задается с соответствующим значением Id, передаваемым конструктору. |
3 | Методы getId() и fromId() методы преобразуют константу enum в ее Id и обратно. |
Enum должен использоваться в сущности следующим образом:
@Column(name = "GRADE")
private String grade; (1)
public CustomerGrade getGrade() { (2)
return grade == null ? null : CustomerGrade.fromId(grade);
}
public void setGrade(CustomerGrade grade) { (2)
this.grade = grade == null ? null : grade.getId();
}
1 | Персистентное поле имеет тип идентификатора enum (Integer или String ). |
2 | Геттер и сеттер преобразуют тип Id в тип enum и обратно. |
При создании атрибута в дизайнере сущностей Studio, выберите ENUM в поле Attribute type и найдите ваш enum в поле Type. |