java在Hibernate中将多个类映射到一个表,而不使用DTYPE列
我有两个hibernate类:一个基类和一个具有附加字段的扩展类。(这些字段由其他表映射。)
例如,我有:
@Entity
@Table(name="Book")
public class A {
private String ID;
private String Name;
// ...
}
@Entity
@Table(name="Book")
public class B extends A {
public String node_ID;
// ...
}
public class Node {
public String ID; // maps to B.node_ID
// ...
}
在Hibernate中如何映射这一点The hibernate documentation说明了三种类型的继承配置:每个类一个表,一个带有类型列的表,以及一个联接表——所有这些在这里都不适用
我之所以需要这样做,是因为类A来自通用框架,可以在多个项目中重用,而类B(和节点)是特定于一个项目的扩展——它们不会被再次使用。在未来,我可能会有一个C类的房屋ID或其他一些领域
编辑:如果我尝试上面的伪代码配置(两个实体映射到同一个表),我会得到一个错误,即DTYPE列不存在。HQL附加了一个“where DTYPE=“a”
# 1 楼答案
这可以通过将
@DiscriminatorColumn
和@DiscriminatorValue
映射到两个类的相同值来实现;这可以来自您使用的任何具有相同数据的列,而不管是哪种类型(不确定它是否适用于空值)课程应该是这样的: