分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Hibernate继承映射(@Inheritance)

发布时间:2023-09-06 01:21责任编辑:苏小强关键词:Hibernate

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

生成的数据库表如下:

Hibernate继承映射(@Inheritance)

原文地址:http://www.cnblogs.com/zqyanywn/p/7753564.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved