在没有DTYPE列的情况下将多个类映射到Hibernate中的表

我有两个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文档说明了三种类型的inheritance配置:每个类一个表,一个带有类型列的表和一个连接表 – 这里没有一个适用。

我需要这样做的原因是因为A类来自于在多个项目中重用的通用框架,而B类(和Node)是特定于一个项目的扩展 – 它们不会再次被使用。 在将来,我可能有一个带有house_ID或其他字段的C类。

编辑:如果我尝试上面的伪代码配置(两个实体映射到同一个表)我得到DTYPE列不存在的错误。 HQL有一个“附加DTYPE =”A“的地方。

这可以通过将@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; // ... }