【发布时间】:2014-10-05 18:24:13
【问题描述】:
我正在开发在线网上商店,我需要有关 Hibernate 映射的帮助。我有以下继承:
BaseProduct
/ \
Guitar Drum
/ \ / \
AcGuitar ElGuitar AcDrum ElectricDrum
我想要什么:
1) id、name、description 等常用字段会在@MappedSuperclass BaseProduct 中。
2)乐器类型(吉他、鼓)对于这些类型的乐器会有共同的字段。
3)最后,具体类 AvGuitar、ElGuitar 等将具有此具体乐器的独特属性。
最大的问题是我希望有两个表用于两种 types 乐器:t_guitar 和 t_drum (InheritanceType.TABLE_PER_CLASS),对于具体类,一个表 InheritanceType.SINGLE_TABLE,这意味着将有一张用于原声和电吉他的表格,一张用于原声和电鼓的表格,并带有相应的判别列。
我怎样才能做到这一点?谢谢!
更新 1
由于我需要将整个层次结构作为一种通用类型进行交互并将产品映射到另一个实体,因此我执行了以下操作:
@MappedSuperclass
public abstract class BaseProduct { //supercclass
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
private String title;
// etc
}
中级产品:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Product extends BaseProduct {
}
因此,不幸的是,使用这种解决方案,任何混合仍然不起作用。
【问题讨论】:
-
提升这个问题。我目前正在寻找解决同样问题的方法。似乎 Hibernate 默默地忽略了 SINGLE_TABLE 注释并查找名为 AC_GUITAR、EL_GUITAR、AC_DRUM 或 ELECTRIC_DRUM 的表(在您的情况下)。曾经设法得出结论吗? (为什么不可能也是一个很好的帮助)
标签: java hibernate single-table-inheritance table-per-subclass