java springboot中@OneToMany、@ManyToOne以及@ManyToMany讲解

在 Spring Boot 应用中,使用 JPA (Java Persistence API) 进行对象关系映射 (ORM) 时,@OneToMany, @ManyToOne, 和 @ManyToMany 注解是用来定义实体之间的关联关系的。

下面详细介绍这些注解及其在 Spring Boot 中的应用。

1. @ManyToOne

        @ManyToOne 注解表示一个实体可以关联到另一个实体的一个实例。

        例如,一个订单(Order)可能属于一个客户(Customer),而一个客户可以有多个订单。

        在订单实体中,会看到这样的定义:

@Entity
public class Order {@ManyToOne@JoinColumn(name = "customer_id")private Customer customer;
}

        这里的 @JoinColumn 定义了外键的名称,该外键将指向 Customer 实体的主键。

2. @OneToMany

        @OneToMany 注解表示一个实体可以拥有多个其他实体的实例。这与 @ManyToOne 相反。

        例如,一个客户可以有多个订单。

        在客户实体中,会看到这样的定义:

@Entity
public class Customer {@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, orphanRemoval = true)private List<Order> orders;
}

        mappedBy 指定的是关系的另一端,即 Order 实体中的 customer 字段。

        cascade 属性可以用来控制级联行为,比如当客户被删除时,所有相关的订单也会被删除。

        orphanRemoval 属性则表示,如果从 orders 列表中移除了某个 Order 实例,那么这个实例也将从数据库中被删除。

3. @ManyToMany

        @ManyToMany 注解表示两个实体之间可能存在多个实例的关联。

        例如,一本书可以被多个作者编写,同时一个作者也可以写多本书。

        这通常需要一个交叉表来存储这种关系:

@Entity
public class Book {@ManyToMany@JoinTable(name = "book_author",joinColumns = @JoinColumn(name = "book_id"),inverseJoinColumns = @JoinColumn(name = "author_id"))private List<Author> authors;
}

        在 @ManyToMany 关系中,@JoinTable 注解用于定义中间表的结构,包括表名和关联的列。

4. 注意事项

        关系维护方(Owner Side):在 @OneToMany 和 @ManyToOne 关系中,通常需要明确哪一方是关系的维护方。在上述例子中,Customer 实体是关系的维护方,因为它持有 List<Order>。

        性能和延迟加载:在配置这些关系时,可以使用 fetch 属性来控制数据的加载策略。例如,FetchType.LAZY 意味着相关联的数据只有在显式请求时才会加载,这有助于提高应用程序的性能。

        级联行为:cascade 属性允许在执行某些操作时自动执行其他操作,如保存或删除关联的实体。

理解这些注解的工作原理对于正确设置实体之间的关系至关重要,以确保数据一致性和应用性能。在 Spring Boot 中,这些关系通常是在实体类上定义的,并由 Spring Data JPA 自动管理。

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

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

相关文章

Java-Redis-Clickhouse-Jenkins-MybatisPlus-Zookeeper-vscode-Docker-jdbc

文章目录 Clickhouse基础实操windows docker desktop 下载clickhousespringboot项目配置clickhouse Redis谈下你对Redis的了解&#xff1f;Redis一般都有哪些使用的场景&#xff1f;Redis有哪些常见的功能&#xff1f;Redis支持的数据类型有哪些&#xff1f;Redis为什么这么快…

流媒体技术

流媒体技术入门 在现代数字媒体环境中&#xff0c;流媒体技术已经成为音视频内容传输的主要形式。无论是直播、点播&#xff0c;还是视频会议&#xff0c;流媒体技术都为高效、低延迟的内容分发提供了强有力的支持。这篇博客将介绍什么是流媒体技术&#xff0c;流媒体的工作原…

第一个ffmpeg程序

在进行使用ffmpeg进行编写程序时&#xff0c;首先要记得进行注册设备&#xff08;avdevice_register_all &#xff09;&#xff0c;程序运行时&#xff0c;只需要注册一次就可以 avdevice_register_all 是 FFmpeg 多媒体处理库中的一个函数&#xff0c;其作用是注册所有可用的音…

【AI前沿】人工智能的历史演进

文章目录 &#x1f4d1;引言一、人工智能的起源与早期发展1.1 古代与早期的智能机器设想1.2 20世纪初期的机械计算机1.3 图灵测试与计算智能1.4 达特茅斯会议与人工智能的正式诞生 二、早期AI研究与第一次冬天2.1 早期的探索与挑战2.2 早期的专家系统2.3 第一次AI冬天 三、专家…

SpringBoot日常:@Scheduled实现服务启动时执行一次

文章目录 一、Scheduled详解二、逻辑实现1、创建定时任务逻辑方法2、新建一个启动执行类 三、测试结果 说到定时任务&#xff0c;我们应该会想起Scheduled&#xff0c;Quartz以及XXL-JOB&#xff0c;但是有的单体服务或者小项目&#xff0c;为了方便快捷&#xff0c;可能会直接…

【昇思25天学习打卡营第1天】

前言 例如&#xff1a;随着大模型的爆火&#xff0c;这门技术也越来越重要&#xff0c;很多人都开启了关于大模型知识的学习&#xff0c;但大模型需要一定的资源且涉及的模块很多&#xff0c;如果个人想要系统的学习会有些难度&#xff0c;好在有昇思大模型平台&#xff0c;能…

WebRTC群发消息API接口选型指南!怎么用?

WebRTC群发消息API接口安全性如何&#xff1f;API接口怎么优化&#xff1f; WebRTC技术在现代实时通信中占据了重要地位。对于需要实现群发消息功能的应用程序来说&#xff0c;选择合适的WebRTC群发消息API接口是至关重要的。AokSend将详细介绍WebRTC群发消息API接口的选型指南…

光耦测试有关的单词

NC 无连接 Anode 阳极 Cathode 阴极 Vss 负电源电压 device 装置 receive 接收 supply 供应 threshold 门槛 forward 前锋 measure 测量 voltage 电压 current 电流 threshold 门槛 lockout 停/锁定 hysteresis 滞后 propagation 传播 ramp 斜坡 photodiode 光…

本地部署 SenseVoice - 阿里开源语音大模型

本地部署 SenseVoice - 阿里开源语音大模型 1. 创建虚拟环境2. 克隆代码3. 安装依赖模块4. 启动 WebUI5. 访问 WebUI 1. 创建虚拟环境 conda create -n sensevoice python3.11 -y conda activate sensevoice 2. 克隆代码 git clone https://github.com/FunAudioLLM/SenseVoic…

本地部署 Llama3 – 8B/70B 大模型!

Llama3&#xff0c;作为Meta公司新发布的大型语言模型&#xff0c;在人工智能领域引起了广泛的关注。特别是其8B&#xff08;80亿参数&#xff09;版本&#xff0c;在性能上已经超越了GPT-3.5&#xff0c;而且由于是开源的&#xff0c;用户可以在自己的电脑上进行部署。 本文和…

太多项会毁了回归

「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 多项式回归的过度拟合及其避免方法 通过添加现有特征的幂&#xff0c;多项式回归可以帮助你充分利用数据集。它允许我们甚至使用简…

STL中二分查找函数

1. binary_search binary_search函数用于判断一个元素是否存在于已排序的范围内。其原型如下&#xff1a; bool binary_search( ForwardIt first, ForwardIt last, const T& value ); 其中&#xff0c;first和last是范围的首尾迭代器&#xff0c;value是要查找的元素。如…

【智能算法改进】多策略改进的蜣螂优化算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】蜣螂优化算法&#xff08;DBO&#xff09;原理及实现 2.改进点 混沌反向学习初始化 采用 Pwlcm 分段混沌映射&#xff0c;由于 Pwlcm 在其定义区间上具有均匀的密度函数&#xff0c;在特定的…

Java Executors类的9种创建线程池的方法及应用场景分析

在Java中&#xff0c;Executors 类提供了多种静态工厂方法来创建不同类型的线程池。在学习线程池的过程中&#xff0c;一定避不开Executors类&#xff0c;掌握这个类的使用、原理、使用场景&#xff0c;对于实际项目开发时&#xff0c;运用自如&#xff0c;以下是一些常用的方法…

User parameters 用户参数与Web监控

目录 一. 自定义键介绍 二. 制作步骤 1. 添加无可变部分参数 2. 添加有可变参数 3. 使用用户参数监控php-fpm 服务的状态 三. Web页面导入应用监控 四. Web监控 主要功能和操作&#xff1a; 开启方式 官方预定义监控项文档https://www.zabbix.com/documentation/6…

华三m-lag三层转发+VRRP配置案例

目录 一、相关理论介绍 1.1 华三M-LAG介绍 1.2 DRCP协议 1.3 keepalive机制 1.4 MAD机制 1.5 一致性检查功能 二、M-LAG系统建立及工作过程 三、实验组网案例 3.1 组网需求 3.2 组网拓扑 3.3 设备接口及地址规划 四、具体配置命令 4.1 S6850-1的配置 4.2 S6850-2…

华为OD机考题(HJ71 字符串通配符)

前言 经过前期的数据结构和算法学习&#xff0c;开始以OD机考题作为练习题&#xff0c;继续加强下熟练程度。 描述 问题描述&#xff1a;在计算机中&#xff0c;通配符一种特殊语法&#xff0c;广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的…

AI:助力开发者翱翔,而非抢夺其舞台

在当今这个科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;犹如一股春风&#xff0c;悄然渗透进全球各个行业&#xff0c;尤其在软件开发领域&#xff0c;其影响力日益显著。从初创企业到跨国巨头&#xff0c;无一不在积极探索AI如何重塑编程的面貌&#xf…

护眼灯什么价位的好?好用又实惠的护眼灯推荐

护眼灯&#xff0c;简单来说就是保护视力的台灯&#xff0c;专业的护眼台灯的光线与自然光光线相似&#xff0c;有亮度稳定、不闪烁&#xff0c;发光面积大等这些特点。那么&#xff0c;护眼灯什么价位的好&#xff1f;市面上所出现的护眼台灯良莠不齐&#xff0c;价格低的质量…

Spring容器加载Bean和JVM加载类

1、JVM加载类 类的加载是在首次需要访问类的信息或实例化类的对象时发生的过程。ClassLoader负责加载类的字节码&#xff0c;并在内存中创建对应的Class对象&#xff0c;从而使得Java程序能够操作和使用这些类。 在Java中&#xff0c;类的加载是按需进行的&#xff0c;也就是…