将多个类映射到Hibernate中没有DTYPE列的表
问题描述:
我有两个hibernate类:基类和具有附加字段的扩展类。 (这些字段由其他表映射)将多个类映射到Hibernate中没有DTYPE列的表
例如,我有:
@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类(和Node)是特定于一个项目的扩展 - 它们不会再被使用。将来,我可能会有一个带有house_ID或其他字段的C类。
编辑:如果我尝试上述伪代码配置(两个实体映射到同一个表),我得到一个错误,指出DTYPE列不存在。 HQL有一个“where 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;
// ...
}
如果这些类映射到同一个表,而不鉴栏,如何将休眠区分哪个是哪个? – axtavt 2011-02-02 10:00:55