如何处理指向通用接口的指针的JPA注释

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 /休眠应该足够聪明,知道一切都会在运行时工作了.让我想知道我是否应该以某种方式忽略这个错误.

Pas*_*ent 8

我的问题是Eclipse在OneToOne"目标实体"T"的文件中显示错误,因为以前不是实体."

是的,即使是T在扩展Entity,也不知道有任何JPA提供商支持这个(这不是JPA规范的一部分).有关更多反馈,请查看JPA Generic实体类Mappedsuperclass是不可能的!(关于EclipseLink的非常相似的线程):

不,你将无法使实体通用.提供程序将无法将关系映射到通用定义定义的特定类型,因为当在代码中创建实体而不是定义实体时,将分配此类型.请记住,在指定泛型时,集合(在本例中)仅限于这些类型.提供者不可能在每个实体实例的基础上具有此限制性.在某些情况下,更改类型可能会导致为单个Entity实例映射完全不同的表,并且肯定不支持.

  • Oracle可爱搞砸了所有内容,你发布的话题的链接(forums.sun.com/thread.jspa?threadID=5268944)返回404.无法在任何地方找到原始帖子(谷歌点回到这里和其他地方使用破碎的链接).oracle内置搜索没有给出任何结果.你(或其他人)可以给我一个新链接吗? (2认同)