我正在使用JPA 2.0和EclipseLink 2.2.0。
我有一个@MappedSuperclass,AbstractEntity,它是我所有提供PK和审核列的实体的基础。
我想让另一个@MappedSuperclass扩展该类,并成为TABLE_PER_CLASS继承策略的根。
目前,在使用Maven构建时,我收到了标题错误。
继承层次结构中是否允许多个@MappedSuperclass?
答案 0 :(得分:24)
在同一继承层次结构中允许多个映射的超类。在规范中没有直接说明,但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按预期工作 - 它成为实体继承层次结构的根。
通常,映射的超类仅用于允许重用映射,并且它们不是实体继承的一部分。
如果这不能回答您的问题,那么如果您可以分享这些“标题错误”会有所帮助。
答案 1 :(得分:3)
继承层次结构中是否允许多个@MappedSuperclass?
是,我已经这样做了。为了能够回答有关maven错误的问题,您必须提供堆栈跟踪和代码..