将多个类映射到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“

+0

如果这些类映射到同一个表,而不鉴栏,如何将休眠区分哪个是哪个? – axtavt 2011-02-02 10:00:55

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