博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate继承映射(@Inheritance)
阅读量:4977 次
发布时间:2019-06-12

本文共 2139 字,大约阅读时间需要 7 分钟。

继承映射在 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 类似。

生成的数据库表如下:

转载于:https://www.cnblogs.com/zqyanywn/p/7753564.html

你可能感兴趣的文章
ADO MFC SQL2000
查看>>
Hie with the Pie
查看>>
2019.01.04 bzoj2962: 序列操作(线段树+组合数学)
查看>>
ThinkPHP5集成支付宝手机网站支付接口
查看>>
hdu 3584 Cube (三维树状数组,更新区间,查询单点)
查看>>
lvs基础
查看>>
接口测试 rest-assured 使用指南
查看>>
Java 8简明教程
查看>>
Java线程池使用说明
查看>>
ectouch第十一讲 之 ECTouch 菜单里如何添加文章链接
查看>>
adb logcat
查看>>
VME总线 分类: 生活百科 2014-06-...
查看>>
数字信号相关和卷积
查看>>
[CSAPP]Bufbomb实验报告
查看>>
NaviActivity实现
查看>>
将已安装win10的系统重装(格式化C盘)
查看>>
C# 中的委托和事件
查看>>
CSS基础学习 17.CSS动画
查看>>
ATM机
查看>>
java反射
查看>>