【问题标题】:Multiple @MappedSuperclass多个@MappedSuperclass
【发布时间】:2011-06-03 11:15:07
【问题描述】:

我正在使用 JPA 2.0 和 EclipseLink 2.2.0。

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

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

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

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

【问题讨论】:

    标签: jpa-2.0


    【解决方案1】:

    在同一继承层次结构中允许多个映射的超类。规范中并没有直接这样说,但是 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 可以按预期工作 - 它成为实体继承层次结构的根。

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

    如果这不能回答您的问题,如果您可以分享这些“标题错误”将会有所帮助。

    【讨论】:

    • 对我来说在 JPA 2.1 和休眠 5.2.12.Final(与 spring boot 2.0.0.M7 一起使用)不起作用。
    • 映射的超类不能是实体继承的根。你的意思是不可能是叶子,对吧?
    • SecondMapped 没有注解怎么办?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多