[英]JPA Entity Mapping Inheritance
我对JPA实体映射有疑问。 我有一些课:
A类
@Entity
public class ClassA {
private int id;
@OneToMany
private List<ClassB> listClassB;
}
B级
@Entity
public class ClassB {
private int id;
@ManyToOne
private ClassA classA;
@OneToMany
private List<ClassC> listClassC;
}
C类
@Entity
public class ClassC {
private int id;
@ManyToOne
private ClassB classB;
private String code;
private String name;
@OneToMany
private List<ClassD> listClassD;
}
D类
@Entity
public class ClassD {
private int id;
private Long value;
private Date startDate;
private Date finishDate;
@ManyToOne
private ClassC classC;
}
现在,我想拥有另一个具有ClassC的所有属性和关联的实体,并拥有自己的属性(值是与Class C相关的ClassD的编号)。 当我像这样使用类继承时:
E级
@Entity
public Class ClassE extends ClassC {
// All ClassC properties
private Long numberOfClassD;
}
它抛出com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:“字段列表”中的未知列“ pegawai0_.DTYPE”。 缺少“鉴别符”列导致“可能”。 但就我而言,我没有区分列。
*如何解决此问题?*我仍然可以使用类继承吗? 还是另一种解决方法?
谢谢。
在该示例中,ClassC和ClassE均已标记有@Entity,因此使用了“按类分类的表”继承策略。 默认情况下,区分符列名称为“ DTYPE”。
您可以在'ClassC'上使用'每个类的表'层次结构策略进行尝试。 但是,生成的表与“每个类的表”有很大不同。
您可能想根据域模型检查所需的继承策略。 该链接将是对此的很好指南: http : //docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch10.html
就像Alan Hay在评论中建议的那样,ClassC和ClassE在数据库中没有任何关系。 因此,使用@MappedSuperclass可以解决此问题。
我是这样实现的:
@MappedSuperclass
public Class SuperClass {
private int id;
@ManyToOne
private ClassB classB;
private String code;
private String name;
@OneToMany
private List<ClassD> listClassD;
}
@Entity
@Table(name = "table_name")
public Class ClassC extends SuperClass {
// No Property
}
@Entity
@Table(name = "table_name")
public Class ClassE extends SupperClass {
private String classECustomValue;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.