Java Hibernate每类继承表和单表混合
我正在开发网上商店,我需要Hibernate映射方面的帮助。我继承了以下遗产:Java Hibernate每类继承表和单表混合,java,hibernate,single-table-inheritance,table-per-subclass,Java,Hibernate,Single Table Inheritance,Table Per Subclass,我正在开发网上商店,我需要Hibernate映射方面的帮助。我继承了以下遗产: BaseProduct / \ Guitar Drum / \ / \ AcGuitar ElGuitar AcDrum ElectricDrum 我想要的: 1) id、名称、描述等公共字段将位于@MappedSuperclass BaseProduct中 2) 乐器类型(吉他、鼓)将具有这些类
BaseProduct
/ \
Guitar Drum
/ \ / \
AcGuitar ElGuitar AcDrum ElectricDrum
我想要的:1) id、名称、描述等公共字段将位于@MappedSuperclass BaseProduct中
2) 乐器类型(吉他、鼓)将具有这些类型乐器的公共字段。
3) 最后,混凝土类AVGUITAT、ELGUITAT等将具有这种混凝土乐器的独特属性。
最大的问题是,我希望两种类型的乐器有两个表:吉他和鼓(继承类型。每个类有一个表),具体类有一个表继承类型。单表,这意味着将有一个表用于原声吉他和电吉他,一个表用于原声鼓和电鼓,并带有相应的判别列 我怎样才能做到这一点?谢谢 更新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 {
}
因此,不幸的是,使用这种解决方案,任何混合都无法工作。您可以像
@MappedSuperclass
public class base {
@Id
private String id; //yr field
}
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="classname",
discriminatorType=DiscriminatorType.STRING
)
public class drum extends base{
String drumProperties; //yr drum prop.
}
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="classname",
discriminatorType=DiscriminatorType.STRING
)
public class guitar extends base {
private String guitarProperties; //guitar prop.
}
@Entity
public class AcGuitar extends guitar{
String acGuitarprop;
}
@Entity
public class ElGuitar extends guitar{
String elGuitarprop;
}
@Entity
public class ElDrum extends drum{
String elDrumprop;
}
@Entity
public class AcDrum extends drum{
String acDrumprop;
}
根据结果,您将得到两个表,单位为yr DB,i。E吉他和鼓
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class base {
@Id
private String id; //yr field
}
现在,yr db中有三个表格。请查看以供参考 Prateek Singh,非常感谢您的帮助,但您的解决方案不允许我将产品映射到其他实体。我希望有一个基类(BaseProduct),并将其映射到用户实体等@vmolchanov此解决方案完全实现了您在问题中描述的内容。如果您还有一些要求,请将其添加到问题中。另外,我不知道你所说的“将产品映射到其他实体”是什么意思:请在你的问题中提供一个例子。提出这个问题。我目前正在寻找解决同样问题的方法。Hibernate似乎在默默地忽略单表注释,并查找名为AC_吉他、EL_吉他、AC_鼓或ELECTRIC_鼓的表(在您的示例中)。有没有下过结论?(为什么不可能也是一个很好的帮助)