【发布时间】: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<CommonInterface> 列表。
【问题讨论】:
-
不,这是不可能的
-
我也认为这是不可能的。如果 Hibernate 允许您在实体层次结构的中间切换继承映射策略,则可以在 SubtypeB 中将其设置为 TABLE_PER_CLASS,但(至少在 v.5.4.x 中我尝试过)它没有。 JPA 规范没有为此定义行为。如果 SubtypeB 的子类型数量有限,可以
SELECT x FROM BaseObject WHERE TYPE(x) IN (SubtypeC, SubtypeD)