枚举
枚举是一组常量,可用作 实体 属性值。
在 Jmix 中,枚举是一个实现了 EnumClass
接口的 Java enum,有一个 id
字段,可以是 Integer
或 String
类型。存储在数据库中的是这个字段,而不是 enum 的 ordinal()
或 name()
,这样做考虑了以下优势:
-
可以对枚举常量进行重命名和重新排序,只要保留上述
id
标识,数据模型将与数据库内容一致。 -
即使数据库包含不对应于任何 enum 常量的值(这种情况发生于应用程序的旧版本和新版本使用相同的数据库),该实体仍然可以加载,只是对应的枚举属性值为
null
。如果使用标准 JPA 方法,则不可能加载这样的实例。
使用 Studio 枚举设计器 创建 Jmix 枚举。 |
下面是一个 Jmix 枚举类的例子:
CustomerGrade.java
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 | 每个枚举常量都使用传递给构造函数的 Id 值来定义。 |
3 | getId() 和 fromId() 方法用来实现 Id 和枚举常量的转换。 |
枚举在实体中如何使用:
Customer.java
@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 | 字段为枚举 Id 的类型(Integer 或 String ) |
2 | getter 和 setter 实现 Id 类型和 enum 类型的转换。 |
在 Studio 实体设计器中创建属性时,在 Attribute type 中选择 ENUM 并在 Type 中找到对应的枚举。 |
本页是否有帮助?
感谢您的反馈