Java hibernate如何使用注释映射继承

时间:2016-10-31 11:18:42

标签: java hibernate inheritance

如何在Hibernate中映射继承类:

例如,我有抽象类图和两个子类Square和Circle。如何将它们全部映射到一个表中,例如"数字" ?

我尝试过这样的事情

@Entity
@Table(name = "figures")
public abstract Figure{
}

@Entity
@Table(name = "figures")
public class Square extends Figure{

}

@Entity
@Table(name = "figures")
public class Circle extends Figure{

}

但它不起作用。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

您需要做的是向父类添加注释:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING)
@Table(name = "figures")

DiscriminatorColumn将是hibernate创建的新列,以了解此对象的类型。

在我的情况下,我创建了一个名为&#34的列;键入"

还有对所有孩子班级的注释

在DiscriminatorValue中,您需要插入一个hibernate用来标识该类的值

就我而言,它是String。 (DiscriminatorColumn注释中的discriminatorType)

@Entity
@DiscriminatorValue(V)

所以在你的情况下它可能看起来像那样:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING)
@Table(name = "figures")
public class Figure{

}

@Entity
@DiscriminatorValue("S")
public class Square extends Figure{

}

@Entity
@DiscriminatorValue("C")
public class Circle extends Figure{

}

您可以在此处找到更多信息:http://www.javatpoint.com/hibernate-table-per-hierarchy-using-annotation-tutorial-example