基本上,我想为某些实体创建一个抽象类。我们使用包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;
它使以后的实现复杂化并且不能解决问题:(。解决这个问题的方法是什么?