
[英]Single table inheritance strategy (or table per class hierarchy) with Oracle and Hibernate
[英]Hibernate inheritance table per class and single table mix
我正在开发在线网上商店,并且需要有关Hibernate映射的帮助。 我有以下继承:
BaseProduct
/ \
Guitar Drum
/ \ / \
AcGuitar ElGuitar AcDrum ElectricDrum
我想要的是:
1)ID,名称,描述等公共字段将在@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 {
}
因此,不幸的是,使用这种解决方案时,任何混合都无法正常工作。
你可以做类似...
@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中获得两个表,即吉他和鼓
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class base {
@Id
private String id; //yr field
}
现在yr db中将有三个表。供您参考。 这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.