我正在使用JPA 2.0和EclipseLink 2.2.0。

我有一个@MappedSuperclass,AbstractEntity,这是我所有提供PK和审计列的实体的基础。

我想让另一个@MappedSuperclass扩展该类,并成为TABLE_PER_CLASS继承策略的根。

目前,在使用Maven进行构建时,我收到标头错误。

继承层次结构中允许多个@MappedSuperclass吗?

最佳答案

同一继承层次结构中允许多个映射的超类。在规范中并没有直接说出来,但是JPA 2.0规范没有明确禁止多个映射超类,在其他情况下,它是指在同一层次结构中具有多个映射超类的情况:


实体层次结构的默认访问类型由
将映射注释放置在实体的属性上
实体层次结构中没有的类和映射的超类
明确指定访问类型。


这意味着您可以执行以下操作:

@MappedSuperclass
public class FirstMapped {
    String firstVal;
}

@MappedSuperclass
public class SecondMapped extends FirstMapped {
    String secondVal;
}

@Entity
public class ExtendingEntity extends SecondMapped {
    @Id int id;
}


映射的超类不能是实体继承的根。实体继承的根必须是实体,如documentation中所述。使用EclipseLink将@Inheritance添加到上述示例中的映射超类之一中时,将被忽略。将@Inheritance添加到ExtendingEntity可以按预期方式工作-它成为实体继承层次结构的根。

通常,映射超类仅用于允许重用映射,它们不是实体继承的一部分。

如果这不能回答您的问题,则可以共享这些“标题错误”。

10-07 19:04
查看更多