【问题标题】:Hibernate how to override entity without mapping superclassHibernate如何在不映射超类的情况下覆盖实体
【发布时间】:2017-06-12 05:55:41
【问题描述】:

我在一个公共项目中有一组实体,我想覆盖子项目中的一些值。它可以是不同的映射、额外的字段等......

当我添加一个扩展通用实体的实体时,它被创建为子类并且需要鉴别列。

共同点:

@Entity
class SomeTable {
  private Long id;
}

在子项目中

@Entity
class SomeTable extends common.SomeTable {
    private String extraField;
}

我基本上想要的是将子实体(SubEntity)映射为 org.hibernate.mapping.RootClass。我使用 org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor 从 PersistenceUnitInfo 中明确删除了 common 的类,但它没有帮助。有没有办法禁止映射父类?

我正在使用 spring-boot 和 Hibernate 5.0.11

更新: 到目前为止,我想出了一个解决方案,用 xml 配置映射两个 SomeTable 实体并将它们从 PersistenceUnitInfo 中删除。根据我的观点,这不是很好的方法,但它允许做我想做的事情:单独保留几个项目的所有通用代码,并能够覆盖子项目中的一些模型......

【问题讨论】:

    标签: spring hibernate jpa spring-boot


    【解决方案1】:

    SomeTable 类上添加 @javax.persistence.MappedSuperclass 注释而不是 @javax.persistence.Entity

    这是您的SomeTable 类将不会被映射或创建任何额外的表。它只会向继承自它的其他实体添加额外的列。

    【讨论】:

    • 我试过这种方法。问题是comon.SomeTable 被公地中的其他实体引用。所以我得到了其他实体引用未映射类的错误。
    猜你喜欢
    • 2011-07-12
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多