【Spring Boot】关系映射开发(二):一对多映射

news2024/11/16 9:24:59

JPA 从入门到精通》系列包含以下文章:

  • Java 持久层 API:JPA
  • 认识 JPA 的接口
  • JPA 的查询方式
  • 基于 JPA 开发的文章管理系统(CRUD)
  • 关系映射开发(一):一对一映射
  • 关系映射开发(二):一对多映射
  • 关系映射开发(三):多对多映射

关系映射开发(二):一对多映射

  • 1.编写实体
    • 1.1 新建 School 实体
    • 1.2 新建 Teacher 实体
  • 2.测试映射关系

单向关系的一对多注解 @oneToMany,只用于关系的发出端( 的一方)。另外,需要关系的发出端定义一个 集合类型 的接收端的字段属性。

在一对多关联关系映射中,默认是以 中间表 方式来映射这种关系的。中间表的名称为 “用下画线连接关系的 拥有端发岀端)和 Inverse 端(接收端)”,中间表两个字段分别为两张表的表名加下画线 _ 再加主键组成。

当然,也可以改变这种默认的中间表的映方式。在关系的拥有端,使用 @JoinClolum 注解定义外键来映射这个关系。

1.编写实体

下面以学校(School)和老师(Teacher)来演示一对多的映射关系。

1.1 新建 School 实体

@OneToMany 中 One 的一方 School,见以下代码:

package com.example.demo.entity;

import lombok.Data;
import javax.persistence.*;
import java.util.List;

@Entity
@Data
public class School {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String name;
    // @OneToMany(cascade = CascadeType.ALL)
    @OneToMany()
    @JoinColumn(name = "school_id")
    private List<Teacher> teacherList;
}

1.2 新建 Teacher 实体

@OneToMany 中 Many 的一方 Teacher,见以下代码:

package com.example.demo.entity;

import lombok.Data;
import org.hibernate.annotations.Proxy;
import javax.persistence.*;

@Data
@Entity
public class Teacher {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String name;
    @ManyToOne
    private School school;
}

2.测试映射关系

Service 和 Repository 层在《关系映射开发(一):一对一映射》已经讲过,这里并没有区别,所以不再赘述。

下面直接测试一对多的关系映射。在测试类中,写入以下代码:

package com.example.demo.entity;

import com.example.demo.repository.SchoolRepository;
import com.example.demo.repository.TeacherRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest
@RunWith(SpringRunner.class)
public class OneToManyTest {

    @Autowired
    private SchoolRepository schoolRepository;
    @Autowired
    private TeacherRepository teacherRepository;

    @Test
    public void add() {
        School school1 = new School();
        school1.setName("清华大学");
        schoolRepository.save(school1);
        Teacher teacher = new Teacher();
        teacher.setName("long");
        teacher.setSchool(school1);
        teacherRepository.save(teacher);
    }

    @Test
    public void find() {
        School school1 = new School();
        school1 = schoolRepository.findSchoolById(1);
        List<Teacher> teacherList = school1.getTeacherList();
        System.out.println(school1.getName());
        for (Teacher teacher : teacherList) {
            System.out.println(teacher.getName());
        }
    }

    @Test
    public void deleteSchoolById() {
        schoolRepository.deleteById(3);
    }

    @Test
    public void deleteTeacherById() {
        teacherRepository.deleteById(7);
    }
}

运行测试 add 方法,在控制台输出如下结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行测试 find 方法,在控制台输出如下结果:

在这里插入图片描述
运行测试 deleteSchoolById 方法,在控制台输出如下结果:

在这里插入图片描述
可以看到,先将所有 Teacher 表的外键设置为空,然后删除 School 表的指定值。

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

运行测试 deleteTeacherByld 方法,在控制台输岀如下结果:

在这里插入图片描述
在这里插入图片描述
可见是直接删除指定 Teacher 表的值,并没有删除 School 表的数据。

🚀 在双向一对多关系中:

  • 注解 @OneToMany(mappedBy='发出端实体名称小写') 用于关系的 发出端(即 One 的一方),同时关系的发出端需要定义一个集合类型的接收端的字段属性。
  • 注解 @ManyToOne 用于关系的 接收端(即 Many 的一方),关系的接收端需要定义一个发出端的字段属性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Spring Boot中实现分布式任务调度?

文章目录 引言一、分布式任务调度的基本原理二、Spring Boot与分布式任务调度1. 使用Quartz实现分布式任务调度2. 使用Elastic-Job实现分布式任务调度 三、常见问题与解决方案结论 &#x1f389;欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;…

食品行业制氮机的应用范围解析

在食品行业中&#xff0c;保障食品的品质和安全性是每一个企业所追求的核心目标。制氮机作为一种重要的辅助设备&#xff0c;其在食品行业中的作用不容忽视。 一、保障食品质量与安全性 制氮机通过物理方法从空气中分离出高纯度氮气&#xff0c;为食品提供了一个无氧环境。这一…

C++模板元编程(二)——完美转发

完美转发指的是函数模板可以将自己的参数“完美”地转发给内部调用的其它函数。所谓完美&#xff0c;即不仅能准确地转发参数的值&#xff0c;还能保证被转发参数的左、右值属性不变。 文章目录 场景旧的方法新的方法内部实现参考文献 场景 思考下面的代码&#xff1a; templ…

哈喽GPT-4o,程序员如何通过GPT-4o提高工作效率

目录 一、编写代码Prompt&#xff1a;请用Java语言编写一个二分查找的样例 二、修正代码错误、代码优化Prompt&#xff1a;我们上传一张华为OD算法题的题目描述&#xff0c;再给它我的Java解题代码&#xff0c;问问它有什么问题&#xff1f; 三、解读代码功能、代码翻译Prompt&…

Qt 网络编程 网络信息获取操作

学习目标&#xff1a;网络信息获取操作 前置环境 运行环境:qt creator 4.12 学习内容 一、Qt 网络编程基础 Qt 直接提供了网络编程模块,包括基于 TCP/IP 的客户端和服务器相关类,如 QTcpSocket/QTcpServer 和 QUdpSocket,以及实现 HTTP、FTP 等协议的高级类,如 QNetworkRe…

flask缓存、信号的使用

【 一 】flask-ache ​ 它为 Flask 应用程序提供了缓存支持。缓存是 Web 应用程序中非常常见的做法&#xff0c;用于存储频繁访问但不太可能经常更改的数据&#xff0c;以减少对数据库或其他慢速存储系统的访问&#xff0c;从而提高应用程序的性能和响应速度。 ​ Flask-Cach…

程序员必知的 89 个操作系统核心概念

1. 操作系统&#xff08;Operating System&#xff0c;OS&#xff09;&#xff1a;是管理计算机硬件与软件资源的系统软件&#xff0c;同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系…

Stable Diffusion 【模型推荐】没有最强,只有更强!高清画质!电影光效版SD1.5人像摄影大模型《他和她 2》

今天带来了一款SD1.5大模型——《他和她 2》电影光效版SD1.5人像摄影大模型。该模型经过家叔马丁Mr_M大佬的优化升级后&#xff0c;把SD1.5的影像光效推上了全新的高度&#xff01;根据大佬的描述&#xff0c;该模型具有更强大的细节表现&#xff0c;更细腻的表面肌理&#xff…

揭秘SmartEDA:电路仿真软件如何贯穿课前课中课后,助力电子学习新纪元!

在电子设计与自动化的学习道路上&#xff0c;一款强大的电路仿真软件往往能为学生们带来事半功倍的效果。今天&#xff0c;我们就来深入探讨一下SmartEDA这款电路仿真软件在课前、课中、课后的全方位应用&#xff0c;看看它如何助力我们的电子学习步入新纪元&#xff01; 1、课…

水果商城系统 SpringBoot+Vue

1、技术栈 技术栈&#xff1a;SpringBootVueMybatis等使用环境&#xff1a;Windows10 谷歌浏览器开发环境&#xff1a;jdk1.8 Maven mysql Idea 数据库仅供学习参考 【已经答辩过的毕业设计】 项目源码地址 2、功能划分 3、效果演示

下载安装JavaFX及解决报错:缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序|Eclipse

目录 1.下载并解压 2.Eclipse配置 3.报错问题 解决方法1&#xff1a;将javaSE更改到9以下 解决方法2&#xff1a; 使用module-info.java配置解决 1.下载并解压 JavaFX下载地址&#xff1a;JavaFX - Gluon 选择合适自己电脑配置的sdk版本下载 打不开网页的参考这个博客&…

泛微开发修炼之旅--35关于基于页面扩展和自定义按钮实现与后端交互调用的方法

文章链接&#xff1a;35关于基于页面扩展和自定义按钮实现与后端交互调用的方法

【手写数据库内核组件】0201 哈希表hashtable的实战演练,多种非加密算法,hash桶的冲突处理,查找插入删除操作的代码实现

hash表原理与实战 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 hash表…

如果国产BI工具也有顶流,它们一定会上榜

在数据驱动的今天&#xff0c;商业智能&#xff08;BI&#xff09;工具已成为企业不可或缺的助手&#xff0c;它们通过强大的数据处理和分析能力&#xff0c;帮助企业洞察市场趋势&#xff0c;优化运营决策。如果BI工具界也有“顶流”&#xff0c;那么奥威BI、帆软BI&#xff0…

世优科技获新锐商业价值奖,数字人阿央入选北京市元宇宙“名人”

2024全球经济大会元宇宙创新发展论坛暨2024第九届“创客中国”元宇宙中小企业创新创业大赛&#xff0c;由工业和信息化部网络安全产业发展中心、北京市经济和信息化局、石景山区人民政府、首钢集团有限公司主办&#xff0c;围绕元宇宙底层技术端和产业应用端两个方向&#xff0…

ROS2 分布式 及 ssh远程控制 和 上传下载文件或文件夹

问题1. 多台计算机连接同一wifi后 &#xff0c;运行ROS2的小乌龟案例&#xff0c;自己的计算机&#xff0c;无法控制其他电脑的小乌龟 按照正常的情况来说&#xff0c;ROS2是DDS的自发现通信机制&#xff0c;只要处在同一wifi网络中&#xff0c; A计算机执行启动小乌龟的命…

计算机网络-组播分发树与组播协议

一、组播分发树 前面我们大致了解了下组播的转发原理&#xff0c;通过RPF反向路径检查可以形成无环的组播转发路径&#xff0c;今天继续学习下组播分发树和组播协议。 组播数据转发需要保证转发路径无环&#xff0c;无次优路径且无重复包。通过RPF机制与组播路由协议&#xff0…

【撤稿资讯】国家杰青被撤稿23篇文章,主要原因图片重复使用等

本周投稿推荐 SCI • 能源科学类&#xff0c;1.5-2.0&#xff08;来稿即录25天&#xff09; • 计算机类&#xff0c;2.0-3.0&#xff08;纯正刊29天录用&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; 知网 • 7天录用-检索&#xff08;急录友好&a…

论文图片模糊怎么办?科研绘图小track解决你的困扰

论文图片模糊怎么办&#xff1f;科研绘图小track解决你的困扰 一、 使用draw.io 绘图二、使用在线压缩工具&#xff0c;尽可能的无损压缩(推荐迅捷图片转换器)三、当然你也可以用svg 一、 使用draw.io 绘图 网址&#xff1a;https://draw.io/ 解决方法&#xff1a; 加大图片的分…

延时双删两种实现对比分析

前言 延时双删&#xff08;Delayed Double Deletion&#xff09;是一种在分布式系统或缓存一致性处理中使用的技术&#xff0c;目的是确保缓存与数据库之间的数据一致性。它主要用于处理在高并发情况下&#xff0c;缓存和数据库可能出现的数据不一致问题。 常见更新策略的问题…