小编典典

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

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文档说明了三种类型的继承配置:每个类一个表,一个具有类型列的表和一个联接表-在此都不适用。

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

编辑: 如果我尝试上述伪代码配置(两个实体映射到同一表),则会收到错误消息,指出DTYPE列不存在。HQL附加了“ where DTYPE =“
A”。


阅读 364

收藏
2020-06-20

共1个答案

小编典典

通过将@DiscriminatorColumn和映射@DiscriminatorValue到两个类的相同值,这是可能的。这可以来自您使用的具有相同数据的任何列,而与哪种类型无关(不确定它是否适用于null值)。

这些类应如下所示:

@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;
    // ...
}
2020-06-20