Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hibernate映射继承关系

Hibernate映射继承关系

原创
作者头像
堕落飞鸟
发布于 2023-05-16 05:15:25
发布于 2023-05-16 05:15:25
56800
代码可运行
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏
运行总次数:0
代码可运行

在Hibernate中,继承关系是面向对象编程中常见的一个概念,主要涉及到父类与子类之间的关系。在实际开发过程中,我们有时候需要将继承关系映射到数据库中,以便进行数据操作。在Hibernate中,继承关系的映射可以使用三种方式,分别是单表继承、多表继承和一对一继承。

一、Hibernate继承关系

在面向对象编程中,继承是指在一个类的基础上扩展新的类,扩展后的类具有父类的所有属性和方法,并可以添加新的属性和方法。在Hibernate中,继承关系是指一个实体类继承自另一个实体类。Hibernate中的实体类是指对应于数据库中一张表的Java类,继承关系的映射将子类和父类的属性映射到同一张表中或者分别映射到不同的表中。

在Hibernate中,继承关系的映射方式主要有三种,分别是单表继承、多表继承和一对一继承。

单表继承

在单表继承中,继承关系的子类和父类使用同一个表。子类和父类有共同的属性,而子类定义的新属性,则沿用父类的属性,使用null来填充该属性。在映射到数据库时,使用表中的一个自增长id来区分子类和父类实体。

多表继承

多表继承是指每个实体类都映射到不同的表中,这样可以彼此独立地进行操作。父类和子类之间是基于主键的关系映射,因此,在关系表中需要定义外键来表达继承关系。

一对一继承

一对一继承是指每个实体类映射到一个表中,同时每个表之间具有一对一的关系映射。在这种情形中,父子之间并不会共享某些字段,因此,嵌套不是必须的。

二、单表继承映射示例

在本文中,我们将从单表继承开始,展示如何使用Hibernate实现继承关系的映射。下面是两个Java类,我们将使用这两个类来演示单表继承的映射。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
@Table(name = "person")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    public Person() {

    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@Entity
public class Employee extends Person {
    
    private BigDecimal salary;

    public BigDecimal getSalary() {
        return salary;
    }
    
    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }
}

Person类

在Person类中,我们使用@Entity注解来指定这是一个实体类,@Table注解指定所映射的数据库表名。在类中定义了一个主键的id字段和一个name字段,因为我们使用的是单表继承,这些字段在数据库中都会共用同一张表。

Employee类

在Employee类中,我们定义了一个salary字段,这个字段是新添加的,不在Person类中定义,它将共享Person类在数据库表中定义的字段。

为了将我们的继承层次结构映射到关系数据库中,我们需要在表中添加一个类型标识符。这个标识符可以是字符串(例如"employee"、"person"),或者是数字(例如1、2),用来分辨出当前记录属于哪种类型。

下面是一个创建表的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE person (
    id BIGINT NOT NULL PRIMARY KEY,
    name VARCHAR(50),
    DTYPE VARCHAR(31) NOT NULL,
    salary DECIMAL(10, 2)
);

在上面的示例中,我们添加了DTYPE字段作为标识符,用来标识存储到表中的记录属于哪种类型。DTYPE字段需要在映射Java类中使用@Inheritance注解指定继承策略为InheritanceType.SINGLE_TABLE。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
hibernate继承策略之单表映射
类与类之间的继承关系,hibernate提供了三种映射策略。 InheritanceType.SINGE_TABLE :单表继承(在数据库中用同一张表存储具有继承关系的实体对象,通过不同的类型来区分父类与子类之间的关系) InheritanceType.JOINED: 连接子类策略(在数据库中表示为用外键关联) InheritanceType.TABLE_PER_CLASS: (每个子类对应一张数据库表模型) (该篇只针对单表继承策略) 首先建表模型: CREATE TABLE PERSION (ID N
小小明童鞋
2018/06/13
8060
初识Hibernate之继承映射
Single
2018/01/04
8450
初识Hibernate之继承映射
Hibernate之关联关系映射(一对多和多对一映射,多对多映射)
别先生
2018/01/02
4.9K0
Hibernate之关联关系映射(一对多和多对一映射,多对多映射)
Hibernate基于主键映射的一对一关联关系
Hibernate是一种流行的对象关系映射(ORM)框架,它为开发人员提供了一种简单而高效的方式来映射Java对象到关系型数据库。在Hibernate中,一对一关联关系的映射可以使用主键映射的方式来实现。
堕落飞鸟
2023/05/16
7280
【Hibernate】关系映射
上一篇博客从整体上认识了一下Hibernate的映射关系,今天就来总结一些常用的关系映射。
全栈程序员站长
2022/08/09
7780
【Hibernate】关系映射
Hibernate学习---关联关系映射
关联关系是用到的最多的一种关系,非常重要,在内存中反映为实体关系,映射到DB中主键外键关系,实体间的关联,即对外键的维护,关联关系的发生,即对外键数据的改变。 在这里就不赘述什么是外键什么是主键了。 一丶关联的的数量 实体对象间的关联从数量上可以划分为 1:1(一对一) 1:N(一对多) N:1(多对一) M:N(多对多) 二丶关联属性 Java代码实体定义中,声明另一个实例类类型或其集合类型的属性,称为关联属性。 public class Department{ private Integer
MindMrWang
2018/04/16
1.4K0
Hibernate学习---关联关系映射
Hibernate框架学习之注解配置关系映射
     上篇文章我们通过注解对映射了单个实体类,但是具体项目中往往实体类之间又是相互关联的,本篇文章就是从实体类之间存在的不同关联角度,具体学习下如何映射他们之间的关联,主要涉及内容如下: 单向的一
Single
2018/01/04
2.3K0
Hibernate框架学习之注解配置关系映射
Hibernate实体关系映射
上一篇文章我们学习了Hibernate的框架搭建,并且完成了单表的CRUD操作,今天我们来学习Hibernate中的多表关联。
南风
2019/04/22
1.1K0
Hibernate实体关系映射
Hibernate的继承映射
对象模型示例: 继承映射的实现方式有以下三种: (一)每棵类继承树一张表 (二)每个类一张表 (三)每个子类一张表 (一)每棵类继承树一张表 关系模型如下: 映射文件如下: <hibernate-ma
nnngu
2018/04/03
1K0
Hibernate的继承映射
初识Hibernate之关联映射(二)
本文介绍了Hibernate中关联映射的几种实现方式,包括单向一对多关联、单向多对一关联、双向一对多关联、双向多对一关联以及单向一对一关联。同时介绍了在关联映射中如何配置外键、延迟加载以及级联操作。
Single
2018/01/04
1K0
初识Hibernate之关联映射(二)
Hibernate【映射】知识要点
前言 前面的我们使用的是一个表的操作,但我们实际的开发中不可能只使用一个表的…因此,本博文主要讲解关联映射 集合映射 需求分析:当用户购买商品,用户可能有多个地址。 数据库表 我们一般如下图一样设计数
Java3y
2018/03/15
2.2K0
Hibernate【映射】知识要点
Hibernate 映射文件
Hibernate是一个Java框架,用于将Java对象映射到关系型数据库中。它使用映射文件来描述Java类和数据库表之间的映射关系。
堕落飞鸟
2023/05/15
4220
hibernate笔记(三)
当调用session的save/saveOrUpdate/get/load/list等方法的时候,对象就是持久化状态。
HUC思梦
2020/09/03
6280
Hibernate的核心对象关系映射
Hibernate的核心就是对象关系映射: 加载映射文件的两种方式:   第一种:<mapping resource="com/bie/lesson02/crud/po/employee.hbm.
别先生
2018/01/02
2K0
Hibernate的核心对象关系映射
Hibernate【映射】续篇
组件映射 Java主要的类主要有两种方式 组合关系,组合关系对应的就是组件映射 继承关系,继承关系对应的就是继承映射 组件映射实际上就是将组合关系的数据映射成一张表,组件类和被包含的组件类映射成一张表
Java3y
2018/03/15
7860
Hibernate【映射】续篇
使用Hibernate构建持久层从简单ORM到复杂查询优化
Hibernate 是 Java 开发中常用的 ORM(对象关系映射)框架,它简化了 Java 对象与数据库表之间的映射关系,使得开发者可以专注于业务逻辑,而不用频繁处理 SQL。本文将深入探讨如何使用 Hibernate 构建持久层,从基础的 ORM 映射到复杂查询的优化技巧,帮助你提升开发效率和系统性能。
一键难忘
2025/01/29
1800
Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
本文讲述了如何使用Hibernate进行一对一关联映射,通过实例介绍了User和IdCart两个实体类,以及如何在Hibernate中配置一对一关联映射。
别先生
2018/01/02
1.4K0
Hibernate学习笔记 多表映射
前面说了Hibernate的单表映射,由于是实体类和数据表之间一对一的映射,所以比较简单。现在就来说说多表映射,这需要涉及到多个实体类和数据表之间的关系。因此稍微复杂一点。
乐百川
2022/05/05
1.7K0
Hibernate 关系映射
第 1 章主要讲解了 Hibernate,它是一个开放源代码的对象关系映射框架。通过对JDBC 进行轻量级的对象封装,使 Java 程序员能够随心所欲地使用面向对象的编程思维来操作数据库。作为目前最杰出的 0-R Mapping 框架,Hibernate 的核心是能够支持对象间关系的良好映射。在面向对象设计与实体模型关系中,对象间关系一般包括 4 种:一对一 ( one-to-one)、一对多 ( one-to-many)、多对一(many-to-one)、多对多 (many-to-many)。本章将对一对多、多对一、多对多关联关系进行讲解,了解关联关系的含义以及关联操作的优势。
张哥编程
2024/12/17
1140
Hibernate 关系映射
【SSH快速进阶】——Hibernate继承映射:每个类映射一张表
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/50689003
DannyHoo
2018/09/13
4180
【SSH快速进阶】——Hibernate继承映射:每个类映射一张表
相关推荐
hibernate继承策略之单表映射
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档