Перечисления
Перечисление – это набор констант, которые можно использовать в качестве значений атрибута сущности.
В 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. |