我有一个棘手的事情,我试图映射与枚举存储静态数据。实现接口的枚举类型映射集合
一开始是宣布为枚举类:
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,因为它是可嵌入的?或者,我是否使用我编写的用户类型类作为集合的targetClass?我对它是如何工作的有点困惑。我想保持它的通用性,足以在集合中保存A或B(尽管它最终只会保持一种类型,但可以是两者之一)。
我不希望将它设置为实体类,因为它是静态数据,不会改变,但可能在将来会有新版本,最终会成为另一个枚举。
JPA不支持 –
DataNucleus
2011-04-29 07:20:26