我有一件棘手的事情正在尝试使用 Enums 进行映射以存储静态数据。
它以这样声明的枚举类开始:
interface MyInterface {
String getName();
}
public enum A implements MyInterface {
FIRST_A("First A");
private final String name;
private A(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
return name;
}
}
public enum B implements MyInterface {
FIRST_B("First B");
private final String name;
private B(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
return name;
}
}
现在我想将它们用作:
List<MyInterface> elements
问题在于映射集合。如果我使用我编写的用于编写被持久化枚举的类的 CompositeUserType 以及通过使用 EnumType.STRING 持久化 @Enumerated 所产生的字符串值,我可以正常地持久化这些。在这些情况下,我可以声明:
@Type(type="MyCustomEnumType.class")
@Columns(columns = {
@Column(name = "enumValue"), @Column(name = "enumClass")
})
private Enum enumValue;
在这种情况下,我可以很好地持久化它们,但我不确定在集合上使用 @Type 是否会使该集合中的所有项目都使用该自定义类型持久化。我应该在上面使用@ElementCollection,因为它是可嵌入的吗?或者我是否使用我编写的用户类型类作为集合的目标类?我对它是如何工作的有点困惑。我想让它保持足够的通用性,以便可能在集合中保留 A 或 B(尽管它最终会成为每个实体仅保留一种类型,但也可能是其中一种)。
我不希望将其设置为实体类,因为它是不会更改的静态数据,但将来可能会有一个新版本,最终将成为另一个枚举。