继承映射在 Annotation 中使用 @Inheritance 注解,并且需要使用 strategy 属性指定继承策略,继承策略有 SINGLE_TABLE、TABLE_PER_CLASS 和 JOINED 三种。


一、SINGLE_TABLE

SINGLE_TABLE 是将父类和其所有的子类集合在一块,存在一张表中,并创建一个新的字段来判断对象的类型。

Person.java:

  @Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator",discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue("person")
public class Person {
@Id
@GeneratedValue
private int id;
private String name;
//Getters and setters omitted here...
}

  

@Inheritance 的 strategy 属性是指定继承关系的生成策略,@DiscriminatorColumn 注解作用是指定生成的新的判断对象类型的字段的名称和类型,@DiscriminatorValue 注解是确定此类(Person)的标示,即 DiscriminatorColumn 的值。

Student.java:

 @Entity
@DiscriminatorValue("student")
public class Student extends Person{
private int score;
//Getters and setters omitted here...
}

  

Teacher.java:

  @Entity
@DiscriminatorValue("teacher")
public class Teacher extends Person{
private String title;
//Getters and setters omitted here...
}

  

生成的数据库表如下:

存入数据后结构如下:


二、TABLE_PER_CLASS

TABLE_PER_CLASS 是为每一个类创建一个表,这些表是相互独立的。

Person.java:

@Entity
     @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
     public class Person {
         @Id
         private int id;
         private String name;
     //Getters and setters omitted here...
     }

  


Student.java:

   1:  @Entity
   2:  public class Student extends Person{
   3:      private int score;
   4:  //Getters and setters omitted here...
   5:  }

Teacher.java:

   1:  @Entity
   2:  public class Teacher extends Person{
   3:      private String title;
   4:  //Getters and setters omitted here...
   5:  }

创建的数据库表如下:


三、JOINED

JOINED 是将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系。

Person.java:

   1:  @Entity
   2:  @Inheritance(strategy=InheritanceType.JOINED)
   3:  public class Person {
   4:      @Id
   5:      @GeneratedValue
   6:      private int id;
   7:      private String name;
   8:  //Getters and setters omitted here...
   9:  }

子类中只需声明与父类不同的域即可:

Student.java:

   1:  @Entity
   2:  public class Student extends Person{
   3:      private int coat;
   4:  //Getters and setters omitted here...
   5:  }

Teacher.java 类似。

生成的数据库表如下:

最新文章

  1. 01 LabVIEW的类中各个Scope的范围
  2. 敏捷项目开源管理软件ScrumBasic(1)
  3. js中各种宽高
  4. Jcrop简单实用
  5. 如何区分JS中的this?!
  6. js避免全局污染
  7. CollectionView就是这么简单!
  8. 复合命令A等效于$a
  9. angular、bootstrap初稿搭建
  10. ZOJ ACM 1204 (JAVA)
  11. Spring知识点回顾(04)el 和资源使用
  12. python中的GIL详解
  13. [转载]EXCEL绝对引用中$A$1、A$1、$A1三个的区别?
  14. 环境部署(三):Linux下安装Git
  15. 【Android】Eclipse性能优化,快捷方式,文档注释
  16. C#线程、前后台线程
  17. 转:Xcode打印堆栈信息
  18. 实用ExtJS教程100例-004:等待对话框Ext.MessageBox.wait
  19. 开源项目PullToRefresh详解(二)——PullToRefreshGridView
  20. LR URL编码和解码方法

热门文章

  1. 30_java之DButils工具类
  2. Redux 处理异步 Action
  3. selenium webdriver——JS操作日历控件
  4. Rhythmk 学习 Hibernate 04 - Hibernate 辅助工具 之 JBoos Tool
  5. liquibase使用
  6. Java 堆栈,内存分配理解
  7. 迷你MVVM框架 avalonjs 沉思录 第3节 动态模板
  8. bootstraptable为行中的按钮添加事件
  9. Django 1.10.2 模型数据库操作
  10. 链表求和12 · Add Two Numbers