假设我有一个JPA实体:
@Entity
@Table(name = "PARENT")
public class Parent {
// ...
}
有没有办法,特别是Hibernate,可以在一个单独的表中创建Parent
的子类?
@Entity
@Table(name = "CHILD")
public class Child extends Parent {
// ...
}
主要思想是在项目之间共享的基础包中包含一组公共实体类,并且仅在需要某些项目特定属性时才扩展它们。
答案 0 :(得分:2)
使用@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
注释父类。 Hibernate文档(对于版本4.3,新的5.0文档似乎到目前为止缺少此部分)在本手册的Chapter 10和section 5.1.6中介绍了这一点。
答案 1 :(得分:2)
Hibernate继承:注释映射
使用@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
注释父类。 Hibernate文档(对于版本4.3,新的5.0文档似乎到目前为止缺少此部分)在本手册的Chapter 10和section 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,
}