我有两个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中对此进行映射?hibernate文档说明了三种类型的继承配置:每个类一个表,一个具有类型列的表和一个联接表-在此都不适用。
我之所以需要这样做,是因为类A来自通用框架,该框架已在多个项目中重用,而类B(和Node)是特定于一个项目的扩展- 不再使用。将来,我可能会有一个带有house_ID或其他字段的C类。
编辑: 如果我尝试上述伪代码配置(两个实体映射到同一表),则会收到错误消息,指出DTYPE列不存在。HQL附加了“ where DTYPE =“ A”。
通过将@DiscriminatorColumn和映射@DiscriminatorValue到两个类的相同值,这是可能的。这可以来自您使用的具有相同数据的任何列,而与哪种类型无关(不确定它是否适用于null值)。
@DiscriminatorColumn
@DiscriminatorValue
这些类应如下所示:
@Entity @Table(name="Book") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="published") @DiscriminatorValue(value="true") public class A { private String ID; private String Name; // ... } @Entity @Table(name="Book") @DiscriminatorValue(value="true") public class B extends A { public String node_ID; // ... }