我正在使用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可以按预期方式工作-它成为实体继承层次结构的根。
通常,映射超类仅用于允许重用映射,它们不是实体继承的一部分。
如果这不能回答您的问题,则可以共享这些“标题错误”。