有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Hibernate中将多个类映射到一个表,而不使用DTYPE列

我有两个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中如何映射这一点The hibernate documentation说明了三种类型的继承配置:每个类一个表,一个带有类型列的表,以及一个联接表——所有这些在这里都不适用

我之所以需要这样做,是因为类A来自通用框架,可以在多个项目中重用,而类B(和节点)是特定于一个项目的扩展——它们不会被再次使用。在未来,我可能会有一个C类的房屋ID或其他一些领域

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


共 (1) 个答案

  1. # 1 楼答案

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