我想将选定枚举的列表添加到我的 JPA 实体之一:
@Entity
public class FooEntity {
...
List<SecurityType> securityTypes;
@ElementCollection(targetClass = SecurityType.class)
public List<SecurityType> getSecurityTypes() {
return securityTypes;
}
public void setSecurityTypes(List<SecurityType> securityTypes) {
this.emum1s = securityTypes;
}
...
}
使用枚举
public enum SecurityType {
FOO, BAR
}
我已根据 JPA 的默认行为将数据模型添加到我的数据库中。
不幸的是,我在将这种类型的对象保存到数据库时收到了一个异常:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
at org.eclipse.persistence.mappings.converters.EnumTypeConverter.convertObjectValueToDataValue(EnumTypeConverter.java:160)
at org.eclipse.persistence.mappings.DirectCollectionMapping.postInsert(DirectCollectionMapping.java:2209)
at org.eclipse.persistence.descriptors.DescriptorQueryManager.postInsert(DescriptorQueryManager.java:980)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:480)
如您所见,异常来自 JPA。我有点惊讶,因为我确实有一个枚举类型“SecurityType”的对象,它作为整数(默认行为)写入数据库,它不应该以字符串转换为枚举结束(因为该对象已经是一个枚举)。
我开始调试,发现自动生成的 JPA-proxy 对象不包含属性List<Enum1>,而是List<String>:
对我来说,这看起来像一个错误,我发现了一个描述该主题的问题:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=328371
我用默认的 Glassfish 3.1.2.2 (Eclipselink 1.3) 和 Eclipselink 1.4 尝试了这个。两者都一样。
任何人都可以帮忙,在 JPA @ElementCollections 中使用枚举吗?这是一个错误还是我错过了什么?
谢谢!