我正在开发在线网上商店,我需要有关 Hibernate 映射的帮助。我有以下继承:
BaseProduct
/ \
Guitar Drum
/ \ / \
AcGuitar ElGuitar AcDrum ElectricDrum
我想要的:
1) id、name、description 等常用字段将在@MappedSuperclass BaseProduct 中。
2)乐器类型(吉他,鼓)将具有这些类型的乐器的共同字段。
3)最后,具体类 AvGuitar、ElGuitar 等将具有此具体乐器的独特属性。
最大的问题是我希望有两个表用于两种类型的乐器: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 {
}
因此,使用此解决方案,不幸的是,任何混合仍然不起作用。