多个@MappedSuperclass

ret*_*dev 15 jpa-2.0

我正在使用JPA 2.0和EclipseLink 2.2.0.

我有一个@MappedSuperclass,AbstractEntity,它是我提供PK和审核列的所有实体的基础.

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

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

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

Mik*_*unu 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;
}
Run Code Online (Sandbox Code Playgroud)

映射的超类不能是实体继承的根.实体继承的根必须是实体,如文档中所述.使用EclipseLink将@Inheritance添加到上面示例中的一个映射超类中,将被忽略.将@Inheritance添加到ExtendingEntity按预期工作 - 它成为实体继承层次结构的根.

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

如果这不能回答您的问题,那么如果您可以分享这些"标题错误"会有所帮助.

  • _映射的超类不能是实体继承的根_。你的意思是不可能是叶子,对吗? (2认同)

bee*_*jay 4

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

是的,我已经做到了。为了能够回答有关 Maven 错误的问题,您必须提供堆栈跟踪和代码。