HDa*_*ave 8 generics orm annotations jpa interface
我有一个泛型类,它也是一个映射的超类,它有一个私有字段,用于保存指向同一类型的另一个对象的指针:
@MappedSuperclass
public abstract class MyClass<T extends MyIfc<T>>
implements MyIfc<T>
{
@OneToOne()
@JoinColumn(name = "previous", nullable = true)
private T previous;
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是Eclipse在OneToOne"目标实体"T"的文件中显示错误,因为以前不是实体." 事实上,MyIfc的所有实现都是实体.我还应该补充一点,从MyClass继承的每个具体实现都使用不同的T值(因为T本身)所以我不能使用"targetEntity"属性.
我想如果没有答案,那么我将把这个JPA注释移动到MyClass的所有具体子类.它只是看起来像JPA /休眠应该足够聪明,知道一切都会在运行时工作了.让我想知道我是否应该以某种方式忽略这个错误.
我的问题是Eclipse在OneToOne"目标实体"T"的文件中显示错误,因为以前不是实体."
是的,即使是T在扩展Entity,我也不知道有任何JPA提供商支持这个(这不是JPA规范的一部分).有关更多反馈,请查看JPA Generic实体类Mappedsuperclass是不可能的!(关于EclipseLink的非常相似的线程):
不,你将无法使实体通用.提供程序将无法将关系映射到通用定义定义的特定类型,因为当在代码中创建实体而不是定义实体时,将分配此类型.请记住,在指定泛型时,集合(在本例中)仅限于这些类型.提供者不可能在每个实体实例的基础上具有此限制性.在某些情况下,更改类型可能会导致为单个Entity实例映射完全不同的表,并且肯定不支持.