hibernate——多对多映射

掌握Hibernate中的多对多关系映射 在关系型数据库设计中,多对多关系是一个常见的需求。它允许两个表之间存在一对多或一对多的关系。在Java持久化API(JPA)框架Hibernate中,提供了对多对多关系映射的完整支持。本章我们将概览Hibernate中多对多映射的概念和基础。我们将从关系的定义开始,理解它的应用场景、优缺点以及与一对多和一对一关系的对比。虽然@JoinTable注解提供了大部分常用场景下的配置,但在某些复杂情况下,可能需要更详细的自定义SQL来映射中间表。这时,可以通过注解或者创建一个单独的映射类来定义。 阅读详情

其实不管是什么映射,很关键的一点就是表之间是如何产生映射的。映射关系的产生,关键是在映射文件中配置的,用特定的标签产生特定的映射关系,多对多也不例外。多对多的映射关系,都是转换成多对一的关系,即新增了一个表,来存储两个表之间的关系。此处,我们举一个老师和学生的关系,关键来分析一下,两者是如何产生多对多的映射关系的。

先建立两个类:Teacher和Student

public class Teacher {
	private int id;
	private String name;
	private Set<Student> students;
        ……//set/get方法
}
public class Student {
	private int id;
	private String name;
	private Set<Teacher> teachers;
        ……//set/get方法
}
多对多关系的建立,在两个类中,首先要各自包含对方的属性,由于是多对多,所以是一个集合对象。这个是建立映射关系的基础。


然后就是对应的映射文件了:

Teacher.hbm.xml:
<hibernate-mapping package="com.suo.domain">
	
	<class name="Teacher">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<set name="students" table="teacher_student">
		   <key column="teacher_id"/>
		      <!--key是将Teacher类对应的表的主键,作为teacher_student表的一个外键,column只是起到一个命名的作用 -->
		   <many-to-many class="Student" column="student_id"/>
		      <!--many-to-many是将Student类对应的表的主键,作为teacher_student表的一个外键,column只是起到一个命名的作用-->
		</set>
		<!--
			对set这个标签的初步理解:name指定了类中的属性的名字,table指定了这个属性要映射到的表 。
			key标签指定了本类所对应表的主键,要作为table所指定表的一个外键,并且命名这个外键。
			<many-to-many>标签指定了和本类产生多对多关系的类,并且指定了这个类所对应的表的主键作为在
			table所指定表中的一个外键,并且命名这个外键
		 -->
	</class>
	
</hibernate-mapping>
Student.hbm.xml:
<hibernate-mapping package="com.suo.domain">
	
	<class name="Student">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<set name="teachers" table="teacher_student">
			<key column="student_id"/>
			<many-to-many class="Teacher" column="teacher_id"/>
		</set>
	</class>
	
</hibernate-mapping>
由配置文件我们可以知道,这里建立的是一个双向的映射关系,即在两个映射文件中,都指定了对方的属性。没有主从表之分。需要理解的是,要在数据库中建立一个中间关系的表,如本例中的teacher_student表,只需要配置一个映射文件就行了。至于另一个文件也做了类似的配置,是因为要建立一个双向的关系,在查询的时候,就可以进行双向的查询。



LVGL高效加载外部Flash图片资源的实现与优化 本文深入探讨了在嵌入式UI开发中,如何为LVGL高效加载外部Flash中的图片资源。针对内部Flash容量不足的痛点,详细解析了LVGL的图片处理原理,并对比了内存映射与流式解码两种主流实现方案。文章重点提供了性能优化技巧与实战避坑指南,旨在帮助开发者实现流畅的图片加载体验,解决SPI Flash读取慢、内存占用高等核心挑战。 阅读详情

相关推荐

SLG项目开发经验二_大地图设计与实现

本文深入探讨了SLG游戏大地图设计与实现的关键技术,包括网格化业务框架、AOI系统优化、边界处理方案以及行军系统实现。通过Unity引擎的实践案例,详细解析了大地图性能优化的核心策略,如分块加载、GPU Instancing和差异同步协议,为SLG项目开发提供宝贵经验。

weixin_29001419的博客 218

Hibernate关联映射(多对多)

目录数据库多对多Hibernate框架多对多增加Hibernate多对多删除 数据库多对多 在学习或使用Hibernate框架前,大家或多或少都已经做过多对多关系处理以及了解,为什么这么说,举个很简单的例子,一本书可以有多种类别,一个书类别下不止一本书,那么这就是多对多关系. 对于这种关系的处理,在数据库中都会建立一个表进行桥接,例如: 书本(book)表: Hibernate框架多对多增加 Hibernate多对多删除 ...

Dawn.x的博客 447

Flutter模块打包AAR集成Android原生项目实践

跨平台开发框架Flutter通过将UI组件渲染为原生代码实现高性能表现,其核心优势在于一套代码可同时运行在iOS和Android平台。在工程实践中,将Flutter模块打包为AAR(Android Archive)进行集成,成为混合开发的主流方案。这种方案既保留了原生项目的稳定性,又能渐进式引入Flutter的高效开发特性。通过配置MethodChannel实现原生与Dart代码通信,开发者可以灵活控制Flutter引擎生命周期,优化内存占用和渲染性能。对于电商、社交等需要快速迭代的业务场景,该方案能显著提

weixin_34025051的博客 398

【Hibernate】——多对多关联映射

对比单向和双向关联映射,可以从查询加载的地方看出二者的不同,单向关联映射只能从循环遍历用户获得角色,但是双向关联映射既可以循环遍历用户获得角色,也可以循环遍历角色获得用户。 需要注意的是<key>中的column对应的是当前类在中间表中对应的字段,即对方想要的外键,而<many-to-manyclass="com.bjpowernode.hibernate.Role"column="role_id"/>中的column指示的是中间表中本类想要的外键。还要注意的是inverse的值只能

许小乖……是总攻 928

鸿蒙OS+UniApp文件上传实战:如何解决大文件分片上传的3大坑?

本文深入探讨鸿蒙OS与UniApp结合实现大文件分片上传的实战方案,重点解决分片策略设计、网络中断处理和进度管理三大技术难题。通过鸿蒙分布式特性与UniApp跨平台能力的结合,提供动态分片调整、断点续传和跨设备进度同步等优化方案,显著提升大文件上传成功率和用户体验。

weixin_29250403的博客 474

为JETSON TX2开发板部署YoloV5

参考资料一:nvidia为JETSON Tx2编译的pytorch 参考资料二:Jetson软件包下载 参考资料三:Tx2安装工具的使用 参考资料四: Jetson烧录工具 参考资料五: B站下载的行人视频 一、升级TX2系统版本到最新版(JetPack4.6) 我拿到的板子的版本太低了,在工作的过程中会有很多问题,因此要先升级到最新版 下载参考资料四中的烧录工具,在Ubuntu18.04中安装,只能,必须,一定是Ubuntu18.04 安装完成后使用非root用户启动SDK Manger,登录Nvi.

贱贱的剑 5887

Hibernate第六篇【多对多映射、一对一映射】

前言 前面已经讲解了一对多和多对一的映射是怎么配置了,也讲解了inverse和cascade属性对关联关系的影响,本博文讲解多对多的映射和一对一的映射! 多对多映射 需求:一个项目由多个员工开发,一个员工开发多个项目 设计数据库表 一般地,如果是多对多的映射,我们都会使用一张中间表来保存它们的关联关系…. 设计实体 我们在设计实体的时候,一般是核心数据表对应一个Ja...

3y 375

无源元器件-电容选型参数总结

电容选型时,需要考虑的参数多种多样,这些参数的选择会直接影响到电路的性能、稳定性、成本等多个方面。本文对电阻电容磁珠电感的参数进行详细介绍并总结。

fydar的博客 835

【Hibernate步步为营】--多对多映射详解

上篇文章详细讨论了一对多映射,在一对多映射中单向的关联映射会有很多问题,所以不建议使用如果非要采用一对多的映射的话可以考虑使用双向关联来优化之间的关系,一对多的映射其实质上是在一的一端使用<many-to-one>标签来标明它们之间的关系,另外还需要在一的一端的对象中使用set标明集合映射。

航帆远洋 6151

使用abagen工具箱获取基于脑区的基因表达矩阵

脑区模板定义了您感兴趣的脑区的空间位置。abagen提供了一些预定义的脑区模板,您可以选择使用,也可以使用自定义的脑区模板。它提供了一种简便的方式来获取基于脑区的基因表达矩阵。abagen需要使用Allen脑图谱数据来获取基因表达矩阵。您可以使用abagen内置的下载功能来获取这些数据。这就是使用abagen工具箱获取基于脑区的基因表达矩阵的详细步骤。通过按照上述步骤操作,您可以轻松获取并使用Allen脑图谱数据中的基因表达信息。一旦您加载了脑区模板,您可以使用abagen来获取基于脑区的基因表达矩阵。

web_bug407的博客 1326

Oracle EBS的帐套由“4C”构成,而华为MetaERP将其发展为“6C”

华为MetaERP从OracleEBS的"4C"架构升级为"6C",实现核算理念革新。核心突破在于将会计科目、核算维度和核算单元解耦,形成"科目表+维度库"的灵活架构。新架构优势显著:1)科目回归会计本质,管理维度独立扩展;2)支持无限维度的精细化核算;3)实现数据权限隔离和内部交易自动化;4)采用元数据驱动设计,为AI应用奠定基础。这一平台化架构解决了大型企业在全球化、多元化发展中的核算难题,相比传统架构具有更强的灵活性和扩展性。

金牌架构师 203

hibernate多对多映射

hibernate的多对多映射就好比项目(Project)与开发人员(Developer),他们之间的关系用中间表(t_relation)联系起来。中间表的字段分别为两个表的外键d_id与p_id。 1、创建实体类Project.java package com.itcast.b; import java.util.HashSet; import java.util.Set; public

xiaoxiaoxinhuan的博客 345

BLDC控制实验:方波、霍尔、开环、定速、正转

本文记录博主学习BLDC控制软件的过程。 文章目录1 概述2 软件架构及工具链2.1 软件架构2.2 工具链3 底层代码生成3.1 时钟配置3.2 按键输入配置 1 概述 本文是博主第一次做BLDC控制实验,目的仅仅是写代码让BLDC转起来,而暂时不考虑其他复杂的需求。 控制的方法是比较简单的六步换相法。利用电机内部的霍尔传感器,通过参考电机厂家给出的二二导通换相表,生成方波来控制电机。第一次实验为了简化需求,只考虑开环、定速、正转的情况: 开环:不考虑速度反馈,直接给PWM让电机转起来; 定速:不考虑速

u013288925的博客 1万+

Hibernate框架【五】——基本映射——多对多映射

**如何选择多对多的单向关联还是多项关联。主要取决于实际的业务需要。** 1.如果只需要从一个实体导航到另一个实体,而无需反向导航,那么使用单向关联更为合适。 2.如果不需要再两个实体上进行关系的维护,添加、删除、更新等,那么单向关联更合适。 3.维护上:单向关联不会引入额外的的关系

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 1406

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Hibernate】——多对多映射

多对多映射是我在之前所说的映射里边稍微复杂的,但是理解起来也是相当容易的。如下图:        只需要借助一张表作为中介,管理User 和 Role 之间的关系即可。这样,一个用户可以拥有多个角色,一个角 色可以对应多个用户。        看看代码如何实现,新建User实体类对象: package com.bjpowernode.hibernate; import java.

努力成为自己的榜样。 695

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Hibernate多对多映射 - 连接表

Hibernate多对多映射 - 连接表 今天我们将使用XML和注释配置来研究Hibernate多对多映射。之前我们看过如何在Hibernate中实现One To One和One To Many映射。 目录[隐藏] 1休眠多对多 1.1Hibernate多对多映射数据库设置 1.2Hibernate多对多映射项目结构 1.3Hibernate Maven依赖...

YunWisdom 346

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Hibernate多对多映射项目搭建

多对多映射前言多对多映射1、实现思路2、使用到的数据库3、执行后的数据库代码实现总结 前言 多对多映射 1、实现思路 多对多:一张表包含另外一张表的set对象,中间表不需要新建实体类 2、使用到的数据库 数据库脚本 -- 书本类别表 create table t_category_hb ( category_id int primary key auto_increment, category_name varchar(50) not null ); -- 书本表 create table t

月亮投递员的博客 266

java hibernate 多对多_hibernate的多对多关联映射

在我们实际项目中,多对多的情况也时长存在,比如最常见的就是系统管理的五张表,如下面的一个结构:在本文学习hibernate多对多关联映射的实验中我简单的写几个字段,达到学习目的即可。1.多对多的关系表达1.关系型数据库(RDB)中的表达:2.Java实体中的表达3.orm配置文件中的表达:(注意每次添加了ORM映射文件都要加到主配置文件中)User.hbm.xml/p>"-//Hiberna...

weixin_36302331的博客 271

Hibernate多对多映射

多对多:   * 关系在第三张表中,和两张表本身没有关系   * 多对多谁维护关系:谁都能维护关系(效率是一样的),一般情况下可以通过页面      来体现   * 关系体现:         第三张表的维护:增加、删除

球球之家 1183

Hibernate入门第十一讲——Hibernate的多对多关联映射

在上一讲中,已经讲解过Hibernate中的一对多关联映射了,现在在其基础上,我们来讲解一下Hibernate中的多对多关联映射。 环境搭建 创建表 这里我们以用户(User)与角色(Role)为例来讲解Hibernate关联映射中的多对多关联关系,因此我们要在数据库下新建三张表——用户表、角色表以及中间表,这里笔者使用的数据库是MySQL。 CREATE TABLE `sys_user` ( ...

李阿昀的博客 1479

Hibernate的多对多关联映射

文章目录1. Hibernate多对多的关联映射案例1.1 创建表结构1.2 编写实体类1.3 编写映射文件1.4 编写核心配置文件1.5 编写测试类2. Hibernate多对多的相关操作2.1 级联保存或更新2.2 级联删除2.3 多对多的其他操作 1. Hibernate多对多的关联映射案例 1.1 创建表结构 用户表的建表语句: CREATE TABLE `sys_user` ( `us...

weixin_45990046的博客 179

Hibernate的多对多映射

一、创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql、Oracle、SqlServer等)的Jar包,创建hibernate.cfg.xml 文件,并配置,配置项如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration...

100

mysql 多对多映射_Hibernate 多对多关系映射

Hibernate 多对多关系映射1 Hibernate多对多关系映射1.1 需求分析示例分析我们采用的示例为用户和角色。用户:指的是系统的登录用户。角色:指的是系统不同权限的角色。用户和角色之间的关系是多对多。1.2 多对多表关系建立多对多的表关系建立靠的是中间表,其中用户表和中间表的关系是一对多,角色表和中间表的关系也是一对多,如下图所示:1.3 建立实体类关系User实体类:一个用户可以具有...

weixin_39684898的博客 159

Hibernate框架中如何将多对多映射转化为多对一映射

      在hibernate映射中,多对多映射是最麻烦,最复杂的映射,通常情况下我们都将其转化为多对一映射来提高效率。      本文以老师与课程的对应关系(一个老师可以交多门课程,一门课程可以由多个老师任教)为案例讨论转化的实现:重点考虑其映射文件的配置。      显然以上关系,通过一个中间表(teacher_course),我们可以将其简化成两个多对一得关系:      te

无岸的专栏 2041

java多对多关系实例_java Hibernate多对多映射详解及实例代码

java Hibernate多对多映射前言:一、单向多对多单向多对多的例子用人和职位来举例,一个人可以有多个职位,一个职位会有多个人。单向多对多是指只能在一端来查询获取另一端的内容。多对多的关系在生成关系模型时会生成对象之前的关联表,关联表中存放着两个关系表的主键,它们的关系如下所示:代码部分:(1)映射和关系类因为是单向的关系,所以只需要在一端进行维护,所以我们需要在User.hbm.xml配置...

weixin_35767180的博客 856

Hibernate中使用注解映射多对多

Hibernate中使用注解映射多对多 在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式 多对多的映射 表: CREATE TABLE t_rights ( id NUMBER(5) , name VARCHAR2(50) CONSTRAINT t_rights_name_uk UNIQUE CONSTRAINT t_rights_name_nn NOT NULL ,

阿颜的博客 492
上一篇: hibernate——一对一映射(1)
下一篇: hibernate——一对一、多对一和多对多关系的比较
hackerain
博客等级 码龄16年 753粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值