[英]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.