有没有继承不是@MappedSuperclass的实体的方法?

时间:2016-02-11 17:37:09

标签: java hibernate jpa

假设我有一个JPA实体:

@Entity
@Table(name = "PARENT")
public class Parent {
    // ...
}

有没有办法,特别是Hibernate,可以在一个单独的表中创建Parent的子类?

@Entity
@Table(name = "CHILD")
public class Child extends Parent {
    // ...
}

主要思想是在项目之间共享的基础包中包含一组公共实体类,并且仅在需要某些项目特定属性时才扩展它们。

2 个答案:

答案 0 :(得分:2)

使用@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)注释父类。 Hibernate文档(对于版本4.3,新的5.0文档似乎到目前为止缺少此部分)在本手册的Chapter 10section 5.1.6中介绍了这一点。

答案 1 :(得分:2)

Hibernate继承:注释映射

使用@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)注释父类。 Hibernate文档(对于版本4.3,新的5.0文档似乎到目前为止缺少此部分)在本手册的Chapter 10section 5.1.6中介绍了这一点。

在每个Concrete类方案的一个表中,每个具体类被映射为普通的持久类。因此我们有3张桌子;父母,孩子坚持班级数据。在此方案中,子类的映射重复父类的属性。

以下是每个子类一个表的优缺点。 好处     这是继承映射实现的最简单方法。

以下是使用JPA Annotations映射Parent和Child实体类的示例。

@Entity
@Table(name = "Parent")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Parent {

    // Getter and Setter methods, 
}

@Inheritance - 定义用于实体类层次结构的继承策略。它在实体类中指定,它是实体类层次结构的根。

@InheritanceType - 定义继承策略选项。 TABLE_PER_CLASS是一种针对每个具体类映射表的策略。

@Entity
@Table(name="Child")
public class Child extends Parent {

    // Getter and Setter methods, 
}