Hibernate继承映射(@Inheritance)
2024-08-28 18:11:43
继承映射在 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 类似。
生成的数据库表如下:
最新文章
- 01 LabVIEW的类中各个Scope的范围
- 敏捷项目开源管理软件ScrumBasic(1)
- js中各种宽高
- Jcrop简单实用
- 如何区分JS中的this?!
- js避免全局污染
- CollectionView就是这么简单!
- 复合命令A等效于$a
- angular、bootstrap初稿搭建
- ZOJ ACM 1204 (JAVA)
- Spring知识点回顾(04)el 和资源使用
- python中的GIL详解
- [转载]EXCEL绝对引用中$A$1、A$1、$A1三个的区别?
- 环境部署(三):Linux下安装Git
- 【Android】Eclipse性能优化,快捷方式,文档注释
- C#线程、前后台线程
- 转:Xcode打印堆栈信息
- 实用ExtJS教程100例-004:等待对话框Ext.MessageBox.wait
- 开源项目PullToRefresh详解(二)——PullToRefreshGridView
- LR URL编码和解码方法