Hibernate(Spring-Data)3种实体继承创建表方式指南

文章目录

  • 引言
  • 1. Hibernate 实体继承概述
    • 1.1 继承的概念和作用
    • 1.2 Hibernate 中的实体继承方式
    • 1.3 基础注解
  • 2. 单表继承策略
    • 2.1 概述
    • 2.2 表结构设计
    • 2.3 实体类映射配置
  • 3. 具体类继承策略
    • 3.1 概述
    • 3.2 表结构设计
    • 3.3 实体类映射配置
  • 4. 映射超类策略(每个类一张表)
    • 4.1 概述
    • 4.2 表结构设计
    • 4.3 实体类映射配置
  • 总结

引言

Hibernate是一个基于Java语言的ORM(对象关系映射)框架,它提供了多种实体继承创建表的方式。本文将介绍Hibernate中常用的三种实体继承策略,并详细说明每种策略的表结构设计和实体类映射配置过程。

1. Hibernate 实体继承概述

1.1 继承的概念和作用

实体继承是面向对象编程中常见的概念,它允许通过扩展现有实体类来创建新的实体类。在Hibernate中,实体继承主要用于处理对象之间的继承关系,同时能够有效地映射到数据库表结构中。

1.2 Hibernate 中的实体继承方式

Hibernate提供了三种主要的实体继承策略:单表继承策略、具体类继承策略、映射超类策略。在接下来我们将逐一介绍这些策略的具体实现方法。

1.3 基础注解

@Inheritance@DiscriminatorColumn 是 JPA 注解,用于指定实体类的继承关系和区分列。

  • @Inheritance(strategy = InheritanceType.SINGLE_TABLE)@Inheritance 注解用于指定实体类的继承策略。在示例中,指定的策略是单表继承(InheritanceType.SINGLE_TABLE),意味着所有涉及继承关系的实体类将存储在同一张数据库表中。

  • @DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)@DiscriminatorColumn 注解用于指定区分列的名称和类型。在示例中,指定的区分列是名为 discriminator 的字符串类型列(DiscriminatorType.STRING)。区分列的作用是根据其值来区分不同的实体类型,以便在查询时进行正确的对象实例化。

综合起来,当使用单表继承策略时,@Inheritance 注解用于声明继承关系,并且通过 @DiscriminatorColumn 注解指定区分列的名称和类型。在生成的数据库表中,会包含一个区分列来存储各个实体类型的标识值,以便在查询数据时能够正确还原成相应的对象类型。

2. 单表继承策略

2.1 概述

单表继承策略将所有相关实体类映射到一个数据库表中,通过添加一个discriminator列来区分不同的实体类型。

2.2 表结构设计

在这里插入图片描述

2.3 实体类映射配置

在每个实体类中使用@DiscriminatorValue注解指定实体类型对应的discriminator值。

@Entity
@Data
@DiscriminatorColumn(name = "discriminator", discriminatorType=DiscriminatorType.STRING)
public abstract  class Animal {
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	private long id;
	
	private String name;
	
	private boolean sex;

}

@Entity
@Data
@DiscriminatorValue("B")
public class Bird extends Animal {
	private int height;
	
}
@Entity
@Data
@DiscriminatorValue("P")
public class Pig extends Animal {

	private int weight;

}

在这里插入图片描述

在这里插入图片描述

3. 具体类继承策略

3.1 概述

具体类继承策略将每个具体的实体类映射到独立的数据库表中,每个表都有自己的主键。

3.2 表结构设计

创建一个与每个实体类对应的数据库表,每个表都包含一个独立的主键列。

在这里插入图片描述

3.3 实体类映射配置

注意:这种策略的实体生成表主键不可以自动生成,这也是为什么下面的代码种主键生成策略的注解被注释的原因

@Entity
@Data
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract  class Animal {
	@Id
	//@GeneratedValue(strategy = GenerationType.SEQUENCE)
	private long id;
	
	private String name;
	
	private boolean sex;
}
@Entity
@Data
public class Bird extends Animal {

	private int height;

}

@Entity
@Data
public class Pig extends Animal {

	private int weight;

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 映射超类策略(每个类一张表)

4.1 概述

映射超类策略将共同属性放在一个超类中,并将超类映射到独立的数据库表,每个子类只映射自己特有的属性。

4.2 表结构设计

创建一个包含超类属性的数据库表,然后为每个子类创建一个独立的数据库表。

在这里插入图片描述

4.3 实体类映射配置

在超类上使用@Inheritance(strategy = InheritanceType.JOINED)注解,并在子类上使用@Table注解指定对应的数据库表名。我这里没有使用@Table是因为默认按照类名创建表名

@Data
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract  class Animal {
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	private long id;
	
	private String name;
	
	private boolean sex;

}

@Entity
@Data
public class Bird extends Animal {
	private int height;
}

@Entity
@Data
public class Pig extends Animal {
	private int weight;

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

本文介绍了Hibernate中常用的三种实体继承创建表的方式:单表继承策略、具体类继承策略、映射超类策略。通过合理选择适合的继承策略,可以灵活地处理对象之间的继承关系,并将其映射到数据库表结构中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/97865.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Wolfram Mathematica 13 for Mac 数学计算工具

Wolfram Mathematica for Mac是一款功能强大、划时代的科学计算软件。它结合了数字和符号计算引擎、图形系统、编程语言、文本系统以及与其他应用程序的高级连接,在许多功能方面处于世界领先地位,截至2009年,它是使用最广泛的数学软件之一。人…

智慧工地源码带开发手册文档 app 数据大屏、硬件对接、萤石云

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR、AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最终实现项目对人、机、料、法、环的全方…

计算机毕设 基于机器学习的餐厅销量预测 -大数据 python

文章目录 0 前言餐厅销量预测模型简介2.ARIMA模型介绍2.1自回归模型AR2.2移动平均模型MA2.3自回归移动平均模型ARMA 三、模型识别四、模型检验4.1半稳性检验(1)用途(1)什么是平稳序列?(2)检验平稳性 ◆白噪声检验(纯随机性检验)(1)用途(1)什么是纯随机序列?(2)检验纯随机性 五…

day-03 基于TCP的服务器端/客户端

一.理解TCP和UDP TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常见的传输层协议,用于在计算机网络中提供可靠的数据传输。 1.TCP: 连接导向:TCP是一种面向连接的…

(笔记六)利用opencv进行图像滤波

(1)自定义卷积核图像滤波 import numpy as np import matplotlib.pyplot as plt import cv2 as cvimg_path r"D:\data\test6-6.png" img cv.imread(img_path)# 图像滤波 ker np.ones((6, 6), np.float32)/36 # 构建滤波器(卷积…

每天刷题五道RHCSA/1-5道(RedHat8.2)

1.第一题配置网络 nmcli con show #查看⽹卡信息 ​ nmcli con mod Wired connection 1 ipv4.method manual ipv4.addresses 172.25.250.100/24 ipv4.gateway 172.25.250.254 ipv4.dns 172.25.250.254 #配置ip信息,中间⽤空格隔开 ​ nmcli con up Wired connection…

HCIP学习--扩展知识点

端口镜像-SPAN 抓包软件只能抓取经过本地的网卡的流量 也就是抓取流量只能抓取本设备的流量 [r1]observe-port interface GigabitEthernet 0/0/2 定义一个SPAN的会话,然后定义监控接口(也就是你要用的接口,你连接这个接口来对其他接口抓包…

PXE批量装机

目录 前言 一、交互式 (一)、搭建环境 (二)、配置dhcp服务 (三)、FTP服务 (四)、配置TFTP服务 (五)、准备pxelinx.0文件、引导文件、内核文件 &#…

Java版电子招投标管理系统源码-电子招投标认证服务平台-权威认证

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

汽车售后接待vr虚拟仿真实操演练作为岗位培训的重要工具和手段

汽车虚拟仿真教学软件是一种基于虚拟现实技术的教学辅助工具。它能够模拟真实的汽车环境和操作场景,让学生能够通过虚拟仿真来学习和实践汽车相关知识和技能。与传统的教学方式相比,汽车虚拟仿真教学软件具有更高的视觉沉浸感和互动性,能够更…

YOLOv5 如何计算并打印 FPS

文章用于学习记录 YOLO v5 FPS计算方法修改对应自己数据集的 yaml 文件以及训练好的 pt 文件以及batch-size1, FPS 1000ms/(0.311.91.0)pre-process:图像预处理时间,包括图像保持长宽比缩放和padding填充,通道变换(HWC->CHW&a…

软技能的重要性:在面试中展示团队合作与沟通能力

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【base64】JavaScriptuniapp 将图片转为base64并展示

Base64是一种用于编码二进制数据的方法&#xff0c;它将二进制数据转换为文本字符串。它的主要目的是在网络传输或存储过程中&#xff0c;通过将二进制数据转换为可打印字符的形式进行传输 JavaScript 压缩图片 <html><body><script src"https://code.j…

C#---第二十:不同类型方法的执行顺序(new / virtual / common / override)

本文介绍不同类型的方法&#xff0c;在代码中的执行顺序问题&#xff1a; 构造方法普通方法&#xff08;暂用common代替&#xff09;、虚方法&#xff08;Virtual修饰&#xff09;、New方法&#xff08;new修饰&#xff09;三个优先级相同overide方法&#xff08;会替换virtual…

Crontab定时任务运行Docker容器(Ubuntu 20)

对于一些离线预测任务&#xff0c;或者D1天的预测任务&#xff0c;可以简单地采用Crontab做定时调用项目代码运行项目 Crontab简介&#xff1a; Linux crontab命令常见于Unix和类Unix的操作系统之中&#xff0c;用于设置周期性被执行的指令。该命令从标准输入设备读取指令&…

重磅!GPT-3.5 Turbo推出微调功能,可以打造专属ChatGPT啦!

昨天的追友套路竟然没人看&#xff0c;太可惜了。虽然我知道大家都想快速成功&#xff0c;而且快速成功的秘诀很简单&#xff1a;MONEY&#xff01;&#xff08;钱&#xff09; 可是大伙缺的反而正是这个。 大清早&#xff0c;刷X&#xff0c;看到了一则推送。 OpenAI宣布推出G…

1.网络空间搜素引擎

网络空间搜素引擎 https://cybermap.kaspersky.com/cn 世界所以带有ip的网络设备互联组成的空间叫做网络空间 地址 &#xff1a;shodan.io 简介 &#xff1a; 这句话还是有点东西得 。 区别&#xff1a; 平常得搜素引擎主要搜网页&#xff0c;shadan可以搜所以带有ip地址…

Jmter生成MD5 jmter使用md5 jmter使用自定义参数 jmter生成自定义参数 jmter编写java代码

Jmter生成MD5 jmter使用md5 jmter使用自定义参数 jmter生成自定义参数 jmter编写java代码 1、创建一个线程组2、创建线程组 http请求3、在 http请求添加前置处理器(BeanShell)4、请求测试 是否生效4.1 GET请求4.2 POST请求 1、创建一个线程组 2、创建线程组 http请求 在线程组…

在外SSH远程连接macOS服务器【cpolar内网穿透】

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

Approaching (Almost) Any Machine Learning Problem中译版

前言 Abhishek Thakur&#xff0c;很多kaggler对他都非常熟悉&#xff0c;2017年&#xff0c;他在 Linkedin 发表了一篇名为Approaching (Almost) Any Machine Learning Problem的文章&#xff0c;介绍他建立的一个自动的机器学习框架&#xff0c;几乎可以解决任何机器学习问题…