2011-06-03 56 views
14

我正在使用JPA 2.0和EclipseLink 2.2.0。多个@MappedSuperclass

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

我希望有另一个@MappedSuperclass继承了该类,并成为根的TABLE_PER_CLASS继承策略。

目前,在使用Maven构建时,我会收到标题错误。

在继承层次结构中是否允许多个@MappedSuperclass?

回答

3

在继承层次允许多个@MappedSuperclass?

,我已经这样做了。为了能够回答你关于Maven的错误问题,你必须提供一个堆栈跟踪和代码..

22

多个映射超被允许在同一个继承层次。它不是直接说所以在规格,但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按预期工作 - 它成为实体继承层次结构的根。

一般映射超只允许映射的重用,他们不是实体继承的一部分。

如果不回答你的问题,这将有助于如果你能分享这些“标题错误”。

+0

对于我在JPA 2.1和休眠5.2.12.Final(使用与弹簧引导2.0.0.M7)不起作用。 – 2018-01-30 14:28:05

相关问题