在每个层次结构使用表时,将相同的DB列映射到Hibernate中子类的不同字段/属性

时间:2014-09-30 13:40:07

标签: java hibernate inheritance persistence

我有一个基类(抽象)类A和两个子类B和C,我想在Hibernate中使用每层次表的方法来保存它们。假设B有宽度'和C有“高度”。相同类型的字段。默认情况下,Hibernate会创建两个单独的列,但每行只填充一列。现在,如果我将两个字段映射到数据库中的同一列,会发生什么情况,比如' length'?

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.INTEGER)
public abstract class A {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Integer id;
}

@Entity
@DiscriminatorValue("1")
public class B extends A {
    @Column(name="length")
    public Integer width;
}

@Entity
@DiscriminatorValue("2")
public class C extends A {
    @Column(name="length")
    public Integer height;
}

我运行了一些基本的测试并且没有发生错误,但是我没有在文档中看到这样的事情 - 考虑到这种做法会阻止在复杂的应用程序中创建大量空列并且应该被提及 - 并且真的不要&# 39;有专业知识宣布这是一种安全的做法。

有人做过这样的事吗?这种方法有什么缺点吗?在这种情况下,no-NOT-NULL-on-subclasses限制是否成立?

1 个答案:

答案 0 :(得分:0)

使用这种方法生产两年后,我没有遇到任何问题。

但请注意,您无法对字段设置不同的限制,因为数据库将它们视为一列。