hibernate之关联映射

SpringCloud2025+SpringBoot3.5.0动态路由503问题排查与负载均衡依赖解析 本文详细排查了SpringCloud 2025与SpringBoot 3.5.0环境下,Spring Cloud Gateway动态路由返回503错误的根本原因。核心问题在于新版网关未默认集成负载均衡器,导致无法解析lb://服务名。通过对比静态路由与动态路由,定位到需显式引入spring-cloud-starter-loadbalancer依赖,并提供了完整的解决方案与最佳实践配置。 阅读详情

1.集合映射

      需求:用户购买,填写地址,一个用户可以对应多个地址

首先是javabean设计

public class User {

	private int userId;
	private String userName;
	// 一个用户,对应的多个地址
	private Set<String> address;
	private List<String> addressList = new ArrayList<String>(); 
	//private String[] addressArray; // 映射方式和list一样     <array name=""></array>
	private Map<String,String> addressMap = new HashMap<String, String>();
	
}

然后是xml配置

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.a_collection">
	
	<class name="User" table="t_user">
		<id name="userId" column="id">
			<generator class="native"></generator>
		</id>	
		<property name="userName"></property>
		
		<!-- 
			set集合属性的映射
				name 指定要映射的set集合的属性
				table 集合属性要映射到的表
				key  指定集合表(t_address)的外键字段
				element 指定集合表的其他字段
					type 元素类型,一定要指定
		 -->
		 <set name="address" table="t_address">
		 	<key column="uid"></key>
		 	<element column="address" type="string"></element>
		 </set>
		 
		 <!-- 
		 	list集合映射
		 		list-index  指定的是排序列的名称 (因为要保证list集合的有序)
		  -->
		  <list name="addressList" table="t_addressList">
		  	  <key column="uid"></key>
		  	  <list-index column="idx"></list-index>
		  	  <element column="address" type="string"></element>
		  </list>
		  
		  <!-- 
		  	map集合的映射
		  		key  指定外键字段
		  		map-key 指定map的key 
		  		element  指定map的value
		   -->
		  <map name="addressMap" table="t_addressMap">
		  	<key column="uid"></key>
		  	<map-key column="shortName" type="string" ></map-key>
		  	<element column="address" type="string" ></element>
		  </map>
           </class>
</hibernate-mapping>

保存方法相关代码:

// 保存set
	@Test
	public void testSaveSet() throws Exception {
		Session session = sf.openSession();
		session.beginTransaction();
		
		//-- 保存
		Set<String> addressSet = new HashSet<String>();
		addressSet.add("广州");
		addressSet.add("深圳");
		// 用户对象
		User user = new User();
		user.setUserName("Jack");
		user.setAddress(addressSet);
		
		// 保存
		session.save(user);
		
		session.getTransaction().commit();
		session.close();
	}
	
	// 保存list/map
	@Test
	public void testSaveList() throws Exception {
		Session session = sf.openSession();
		session.beginTransaction();
		User user = new User();
		user.setUserName("Tom");
//		// 用户对象  --  list
//		user.getAddressList().add("广州");
//		user.getAddressList().add("深圳");
//		// 保存
//		session.save(user);
		
		// 用户对象  --  Map
		user.getAddressMap().put("A0001", "广州");
		user.getAddressMap().put("A0002", "深圳");
		
		// 保存
		session.save(user);
		
		session.getTransaction().commit();
		session.close();
	}


2.关联映射
  

需求1:

         部门与员工

                     一个部门有多个员工;       【一对多】

                     多个员工,属于一个部门    【多对一】

需求2:

         项目与开发员工

                   一个项目,有多个开发人员!

                   一个开发人员,参与多个项目!   【多对多】

 

public class Dept {

	private int deptId;
	private String deptName;
	// 【一对多】 部门对应的多个员工
	private Set<Employee> emps = new HashSet<Employee>();
	

这里省略get和set方法代码

public class Employee {

	private int empId;
	private String empName;
	private double salary;
	// 【多对一】员工与部门
	private Dept dept;

然后是xml配置

Dept.hbm.xml 

<hibernate-mapping package="cn.itcast.b_one2Many">
	
	<class name="Dept" table="t_dept">
		<id name="deptId">
			<generator class="native"></generator>   <span style="color:#ff0000;">native表示框架会自动根据数据库底层选择对应的自增方式</span>
		</id>	
		<property name="deptName" length="20"></property>
		
		<!-- 
			一对多关联映射配置  (通过部门管理到员工)
			Dept 映射关键点:
			1.  指定 映射的集合属性: "emps"
			2.  集合属性对应的集合表: "t_employee"
			3.  集合表的外键字段   "t_employee. dept_id"
			4.  集合元素的类型
			
		 -->
		 <set name="emps">   <!-- table="t_employee" -->
		 	 <key column="dept_id"></key>
		 	 <one-to-many class="Employee"/>如果配置文件和实体类不在一个包下,class后要加上包名
		 </set>
		 
		 
	</class>
	

</hibernate-mapping>

Employee.hbm.xml,两处外键字段要相同都是dept_id

<hibernate-mapping package="cn.itcast.b_one2Many">
	
	<class name="Employee" table="t_employee">
		<id name="empId">
			<generator class="native"></generator>
		</id>	
		<property name="empName" length="20"></property>
		<property name="salary" type="double"></property>
		
		<!-- 
			多对一映射配置
			Employee 映射关键点:
			1.  映射的部门属性  :  dept
			2.  映射的部门属性,对应的外键字段: dept_id
			3.  部门的类型
		 -->
		 <many-to-one name="dept" column="dept_id" class="Dept"></many-to-one>
		 
	</class>
	

</hibernate-mapping>

测试

public class App {
	
	private static SessionFactory sf;<span style="color:#ff0000;">静态方便类直接调用,而且只加载一次</span>
	static {
		sf = new Configuration()
			.configure()
			.addClass(Dept.class)   
			.addClass(Employee.class)   // 测试时候使用
			.buildSessionFactory();
	}

	// 保存, 部门方 【一的一方法操作】
	@Test
	public void save() {
		
		Session session = sf.openSession();
		session.beginTransaction();
		
		// 部门对象
		Dept dept = new Dept();
		dept.setDeptName("应用开发部");
		// 员工对象
		Employee emp_zs = new Employee();
		emp_zs.setEmpName("张三");
		Employee emp_ls = new Employee();
		emp_ls.setEmpName("李四");
		// 关系
		dept.getEmps().add(emp_zs);
		dept.getEmps().add(emp_ls);

		// 保存
		session.save(emp_zs);
		session.save(emp_ls);
		session.save(dept); // 保存部门,部门下所有的员工  
		
		session.getTransaction().commit();
		session.close();
		/*
		 *  结果
		 *  Hibernate: insert into t_employee (empName, salary, dept_id) values (?, ?, ?)
			Hibernate: insert into t_employee (empName, salary, dept_id) values (?, ?, ?)
			Hibernate: insert into t_dept (deptName) values (?)
			Hibernate: update t_employee set deptId=? where empId=?    维护员工引用的部门的id
			Hibernate: update t_employee set deptId=? where empId=?
		 */
	}
	// 【推荐】 保存, 部员方 【多的一方法操作】
	@Test
	public void save2() {
		
		Session session = sf.openSession();
		session.beginTransaction();
		
		// 部门对象
		Dept dept = new Dept();
		dept.setDeptName("综合部");
		// 员工对象
		Employee emp_zs = new Employee();
		emp_zs.setEmpName("张三");
		Employee emp_ls = new Employee();
		emp_ls.setEmpName("李四");
		// 关系<span style="color:#ff0000;">,不要忘记添加关系维护</span>
		emp_zs.setDept(dept);
		emp_ls.setDept(dept);
		
		
		// 保存
		session.save(dept); // 先保存一的方法,<span style="color:#ff0000;">注意session保存的顺序</span>
		session.save(emp_zs);
		session.save(emp_ls);// 再保存多的一方,关系回自动维护(映射配置完)
		
		session.getTransaction().commit();
		session.close();
		/*
		 *  结果
		 *  Hibernate: insert into t_dept (deptName) values (?)
			Hibernate: insert into t_employee (empName, salary, dept_id) values (?, ?, ?)
			Hibernate: insert into t_employee (empName, salary, dept_id) values (?, ?, ?)
			少生成2条update  sql
		 */
	}
	
}

总结:

  在一对多与多对一的关联关系中,保存数据最好的通过多的一方来维护关系,这样可以减少update语句的生成,从而提高hibernate的执行效率!



Inverse属性



Inverse属性,是在维护关联关系的时候起作用的。


      表示控制权是否转移。(在一的一方起作用)


 


Inverse , 控制反转。


Inverse = false  不反转;   当前方有控制权


                   True  控制反转; 当前方没有控制权

除了对获取数据没有影响,对于保存数据,解除关联关系,删除数据都有影响。


cascade属性

cascade 表示级联操作  【可以设置到一的一方或多的一方】

         none         不级联操作, 默认值

         save-update     级联保存或更新

         delete                 级联删除

         save-update,delete    级联保存、更新、删除

         all                 同上。级联保存、更新、删除



Zynq UltraScale+网络加速方案:用AXI Ethernet Subsystem实现2.5G吞吐量的配置秘籍 本文详细介绍了在Xilinx Zynq UltraScale+平台上使用AXI Ethernet Subsystem实现2.5Gbps网络吞吐量的配置方法。通过硬件设计优化、Vivado工程配置、Linux驱动调优及性能测试等关键步骤,为工业视觉和5G前传等高速网络应用提供可靠解决方案。 阅读详情

相关推荐

YOLOv8实战火焰和烟雾检测 (视频教程)

本课程将手把手地教大家使用YOLOv8结合可变形卷积(deformable convolution)训练火焰和烟雾数据集,完成一个多目标检测实战项目,可实时检测图像、视频、摄像头和流媒体(http/rtsp)中火焰和烟雾,并提供可视化演示界面 。

bai666ai的博客 1914

Hibernate之一对一关联映射

Hibernate中一对一关联映射共分为两种,一种是一对一主键关联映射,另一种是一对一唯一外键关联映射。下面简单介绍一下这两种关联映射。 一对一主键关联映射 一对一主键关联映射的两个实体有相同的ID。这种映射又分为单向一对一关联主键映射和双向一对一主键关联映射。 单向一对一主键关联映射 实例类图 映射文件IdCard.hbm.xml

梦想起飞的地方,必须用心去经营 2204

AOI检测总误判?五大常见问题与实战解决方案

通过对图像质量、检测程序、外界干扰、算法优化以及设备维护和校准的全面把控,企业可以有效降低误判率,提升AOI检测的准确性和可靠性,为工业生产提供更有力的质量保障。表现描述:在AOI检测时,元器件字符因印刷颜色深浅、模糊或受到灰尘干扰等差异,再加上元件库参数未根据实际生产优化,会使系统误将合格元件判定为不合格,严重影响生产效益和产品质量。优化元件库:着重检测关键差异字符,如型号编码等关键信息,剔除不必要字符的检测项,减少干扰,专注于关键识别的准确性。检测时,根据物料信息动态更新检测参数,使系统适应物料变化。

ALeader_AOI的博客 3494

Hibernate关联映射(非常详细)

在前面的学习中,我们所涉及的都是基于单表的操作,但在实际的开发过程中,基本上都是同时对多张表的操作,且这些表都存在一定的关联关系。 Hibernate 是一款基于 ORM 设计思想的框架,它将关系型数据库中的表与我们 Java 实体类进行映射,表中的记录对应实体类的对象,而表中的字段对应着实体类中的属性。Hibernate 进行增删改查等操作时,不再直接操作数据库表,而是对与之对应的实体类对象进行处理。那么,Hibernate 是如何处理多表关联问题的呢?本节我们针对此问题进行介绍。 关联映射 在关系型

youandme520的专栏 2127

研发工作量科学量化评估模型:从多维系数到等级落地指南

摘要:本文提出了一套基于多维系数的科学量化评估模型,用于精准评估软件开发工作量。该模型从需求复杂度、技术难度、质量要求和依赖风险四个核心维度进行量化评估,通过系数乘积计算综合工作量。文章详细说明了各维度的系数区间划分标准,并演示了从基础工作量估算到综合系数计算的具体步骤。该模型通过结构化评估过程,将主观经验转化为客观量化指标,帮助团队提高工作量评估的准确性,增强项目交付的可预测性。其价值在于使评估过程透明化、结构化和可追溯,从而减少项目延期风险,优化资源规划。

友莘居士的博客 1681

从寄存器到驱动:深入解读RFSoC RF-ADC阈值与校准API的底层逻辑

本文深入解析Xilinx RFSoC中RF-ADC的阈值检测与校准API的底层逻辑,涵盖寄存器映射、驱动实现及Gen3增强功能。通过详细代码示例和寄存器操作流程,揭示如何精准控制信号阈值检测与校准时序,提升系统稳定性与性能。特别探讨RF数据转换器在无线通信和雷达信号处理中的关键应用。

weixin_30552811的博客 687

hibernate关联映射_具有关联映射的Hibernate Composite ID

hibernate关联映射 最近,我们面临着带有复合id字段的Hibernate关联映射的棘手情况。 我们需要与一对一和多对一进行双向关联。我们的拖曳表是“ REPORT”和“ REPORT_SUMMARY”,它们之间具有从REPORT到REPORT_SUMMARY的一对多关系,而从REPORT_SUMMARY到REPORT表。 REPORT_SUMMARY表的主键定义为复合主键,它由自动增...

最佳 Java 编程 118

ZYNQ裸机双网口通信实战:手把手教你用SDK和LWIP配置PS+PL以太网(附完整源码)

本文详细介绍了在ZYNQ裸机环境下实现双网口通信的全流程,包括硬件配置、LWIP协议栈优化及TCP通信实现。通过Vivado SDK和LWIP协议栈,开发者可以高效配置PS端内置网口与PL端扩展网口,提升嵌入式网络应用的灵活性和性能。附完整源码,助力快速开发。

weixin_30831529的博客 421

hibernate关联映射注解

hibernate的关联映射

xiaoerjun的博客 287

SAP固定资产原值与净值取值逻辑全解析:从数据表到ABAP实战

在企业资源计划(ERP)系统中,固定资产的价值管理是财务会计的核心模块,其关键在于准确核算资产原值与净值。从技术原理上看,这涉及对资产全生命周期业务(如购置、折旧、转移、报废)的财务建模,以及底层数据表(如ANLC、ANEP)的精准关联与计算。掌握这一逻辑的技术价值在于,能够确保财务报表数据的准确性,满足合规性要求,并为管理决策提供可靠依据。在SAP ECC或S/4HANA系统的应用场景中,ABAP开发者与财务顾问常需通过编写报表程序,从复杂的数据结构中提取资产价值信息。本文聚焦于SAP资产会计模块,深入剖

weixin_30984001的博客 393

Android功耗系列专题理论之十三:MTK平台待机功耗问题分析方法

摘要:本文详细分析了MTK平台待机功耗问题的调试方法,重点介绍了SPM电源管理机制、26M时钟控制逻辑以及系统深睡眠状态的判断标准。文章提供了完整的Debug流程,包括日志抓取、唤醒源分析、SCP睡眠状态检查以及时钟/LDO状态排查等实用技巧,并给出硬件漏电点和软件配置异常的排查方案。针对不同模块(Modem/Conn/SSPM等)提供了具体的电源管理绕过命令,适用于功耗问题调试和低功耗模式验证场景。

559

Hibernate的关联映射

首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射。ORM的实现思想就是将关系型数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。Hibernate正是实现了这种思想,达到了方便开发人员以面向对象的思想来实现对数据库的操作。 Hibernate在实现ORM功能的时候主要用到的文件有:映射类...

nnngu 255

非机动车闯红灯检测与自动录像系统实战(YOLO+追踪+红绿灯感知)

本文聚焦非机动车(如电动车、自行车)闯红灯行为的智能识别系统构建,结合 YOLO 检测模型、追踪算法(如 DeepSORT)、红绿灯状态感知与区域判断逻辑,构建完整的违章行为识别与证据录像系统。文章涵盖数据采集、模型选型、红绿灯触发机制、闯红逻辑判定、视频自动保存等核心环节,辅以 Jetson/RK3588 平台部署与工程实测,适用于城市交通监控、智慧路口管控等真实场景。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1285

hibernate关联映射

hibernate多对一关联映射[关系:用户user(多)----组group(一)]关联映射的本质: * 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用会在多的一端加入一个外键,指向一的一端,这个外键是由中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致标签的定义示例:  *   理解级联的含义? * 是

1218

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

hibernate使用关联映射的优劣比较:为什么用Hibernate时一定要做关联映射?

http://drinkjava.javaeye.com/blog/82107?page=2#comments读过上文以后有很多感慨:技术上的、心情上的。作者提出了一种迥异的、全新的hibernate使用方法。可是如果都这样做系统,那还怎么显示出对OR精通的各位牛人的价值呢?怎么能21世纪还是用ER模型呢? 所以作者的文章当然得不到javaeye各位"大拿"、“主流”的承认

凤影的专栏 3673

精雕软件(JDpaint) 5.5 绿色版

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

【Hibernate框架】关联映射(一对一关联映射)

关于一对一映射的相关知识告一段落,但是大家要知道,唯一外键关联其实就是多对一关联的一种特殊情况,所以当我们需求变了,要求有一对一变成多对一的时候,我们该怎么办呢?其实很简单,直接把外键唯一的约束干掉就可以了,是不是方便很多呢

Davie's Happy Life 813

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

许小乖……是总攻 928

16. Hibernate 双向多对多关联映射

通过本节课程的学习,你将发现关联对象之间的微妙关系。相信这种关系对你更深入地认识HIbernate有很大的帮助。多对多双向关联映射中哪一方是关系维系者;级联操作与关系维系者。

这是一个web全栈开发的博客,取其精华去其糟粕,争取让大家一看就懂,一学就会,一用就成~ 966

Hibernate关联映射(一对多/多对多)

3.  Hibernate关联映射 上接Hibernate持久化类:https://blog.youkuaiyun.com/biggerchong/article/details/84260707 目录 3.  Hibernate关联映射 3.1 数据库表之间的关系 3.1.1 一对多关系 3.1.2 多对多关系 3.1.3 一对一关系(实际开发中使用较少) 3.2 实战Hibernate...

知飞翀的博客 1万+

总结Hibernate中的几种关联映射的配置

1 单向多对一(多个A映射到一个B) 把A中的Integer B_id改成 B b,然后在A的映射文件中添加: <many-to-one name="b" class="B的类全名" column="foreign key所在的字段名称" not-null="true"/...

chuanao8829的博客 217

02hibernate关联映射

Hibernate中的关联映射关系

qyyyyp的博客 291

Hibernate-关联映射

关联映射 多对一 //emp-dept联合查询 public void qEmp(){ session=HibernateUtil.getSession(); sql="from Emp where empNo =7788"; Query query=session.createQuery(sql); List<Emp>

北京Java青年 426

Hibernate 关联映射总结

HackersAndPainters 1392

具有关联映射的Hibernate Composite ID

最近,我们面临着带有复合id字段的休眠关联映射的棘手情况。 我们需要与一对一和多对一建立双向关联。我们的拖曳表是“ REPORT”和“ REPORT_SUMMARY”,它们之间具有从REPORT到REPORT_SUMMARY的一对多关系,而从REPORT_SUMMARY到REPORT表。 REPORT_SUMMARY表的主键定义为复合主键,它由自动增量id字段和REPORT表的主键组成。 ...

最佳 Java 编程 223

SSH Chapter 06 Hibernate 关联映射

SSH Chapter 06 Hibernate 关联映射 笔记 本章目标: 理解Hibernate的关联映射 理解inverse属性、cascade属性 掌握单向的多对一、双向的一对多映射 掌握多对多映射 掌握延迟加载 技术内容: 前面我们已经掌握了如何配置Hibernate对数据库进行增,删,改,查操作,掌握Java对象的生命周期. 在学习面向对象时,学习过对象之间存在关联的关系. 在学习数据库时,也学习过表和表之间也可以通过外键关联起来. 怎样映射面向对象领域的关联关系和数据库关系中的外

weixin_40154786的博客 261

Hibernate——一对一关联映射

背景:最近在学习Hibernante视频,内容丰富

Reka's blog ^_^ 711
上一篇: struts之XML配置文件归纳
下一篇: HQL查询&连接池&二级缓存
2YSP
博客等级 码龄10年 12粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值