【问题标题】:Ignore class in Hibernate entity mappingHibernate 实体映射中的忽略类
【发布时间】:2021-11-22 21:44:03
【问题描述】:

是否可以不在 Hibernate 中的实体层次结构中间为类创建表?

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class BaseObject {
    ...
}

@Entity
public class SubtypeA extends BaseObject {
    ...
}

//@Entity <---- NOT AN ENTITY
public class SubtypeB extends BaseObject {
   ...
}

@Entity <---- ENTITY
public class SubtypeC extends SubtypeB {
   ...
}

我想指出一些实体是某种类型的子集,以便返回所有这些实体的集合,但我不会在这个中间类型中添加任何额外的属性。因此,保留带有 id 字段的额外表格只是为了加入表格听起来并不好。

更好的解决方案是实现一些通用接口CommonInterface,但我无法从查询中返回List&lt;CommonInterface&gt; 列表。

【问题讨论】:

  • 不,这是不可能的
  • 我也认为这是不可能的。如果 Hibernate 允许您在实体层次结构的中间切换继承映射策略,则可以在 SubtypeB 中将其设置为 TABLE_PER_CLASS,但(至少在 v.5.4.x 中我尝试过)它没有。 JPA 规范没有为此定义行为。如果 SubtypeB 的子类型数量有限,可以SELECT x FROM BaseObject WHERE TYPE(x) IN (SubtypeC, SubtypeD)

标签: hibernate jpa entity


【解决方案1】:

我不知道您的确切用例,但您可以将BaseObject 建模为@MappedSuperclass,并让除SubtypeB 之外的所有类型扩展一个新类,即BaseEntity,它使用@Inheritance(strategy = InheritanceType.JOINED)

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多