基本上,我想为某些实体创建一个抽象类。
我们对EclipseLink 2.6.0
包中的大多数注释使用javax.persistance
。
我正在努力解决的问题如下:
@MappedSuperclass
public abstract class EnumKeyValueEntity<T extends Enum<T>, K> {
public EnumKeyValueEntity() {
}
@Id
@Enumerated(EnumType.STRING)
private T id;
private K value;
/** getters & setters **/
}
真正的问题是:@Enumerated(EnumType.STRING)
。我想使用这个注释,所以在数据库中会有一个合适的字符串而不是数字。
然而,(我认为)因为它是一个抽象类,我在测试期间遇到错误。其来源描述为:
[ERROR] Internal Exception: Exception [EclipseLink-7151] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.ValidationException
[ERROR] Exception Description: The type [class java.lang.String] for the attribute [id] on the entity class [class pl.ds.eemediation.storage.entities.EnumKeyValueEntity] is not a valid type for an enumerated mapping. The attribute must be defined as a Java enum.
但是,T
确实扩展了Enum
。
我也试过
private Enum<T> id;
它使后来的实现复杂化并且没有解决问题:(。 会有什么办法呢?