Java 用于类层次结构的JPA manytone

Java 用于类层次结构的JPA manytone,java,jpa,Java,Jpa,我有以下几点 @MappedSuperclass public abstract class A { @Id @GeneratedValue public Long id; } @Entity public class B extends A { } @Entity public class C extends A { } @Entity public class D { @ManyToOne public A a; } 问题是D类和字段a(可以是B或C类

我有以下几点

@MappedSuperclass
public abstract class A {
    @Id @GeneratedValue
    public Long id;
}

@Entity
public class B extends A {
}

@Entity
public class C extends A {
}

@Entity
public class D {
    @ManyToOne
    public A a;
}

问题是D类和字段a(可以是B或C类型)。映射应该是什么

你所做的是正确的。它将是映射A。因此,在表D中;我们将有一个额外的列,它将告诉我们A是B还是C。在Toplink中,我们的列名为Type。即使在冬眠状态下,我们也有类似的概念。此列由ORM自动填充。

如果引用另一个实体的
A
,则
A
不应是MappedSuperclass,而应是实体。您应该使用
@实体
对其进行注释,并选择一个


除此之外,映射将保持原样。

这在JPA中无效,因为无法将关系定义为@MappedSuperclass

可以映射A和@实体(Table Pyl类继承会给你相同的数据模型,但也可以考虑加入或单列表,因为它们通常更有效)。 在EclipseLink中,您还可以使用@VariableOneToOne来处理这种类型的关系

看,,

问题是什么?你有什么错误吗?