Hibernate学习总结(3)——关联映射

本文详细介绍了ORM中不同类型的关联映射,包括单向多对一、单向一对多、双向一对多/一对一以及多对多关联,并提供了具体的Hibernate映射文件示例。

5关联映射

5.1实体关联关系

(1)关联关系
通过一个对象持有另一个对象的实例
(2)泛化关系
通过对象之间的继承方法来实现
(3)类与类之间最普遍的关系就是关联关系,在UML 语言中,关联是有方向的。

5.2单向多对一关联

多对一关系使用外键参照,单向多对一关联是最常见的单向关联关系。

关联关系在映射文件(hbm.xml):

(1)many的一端应持有one的一端的对象(引用)
(2)映射文件体现多对一,代码如下:
映射文件例:
<hibernate-mapping>
	<class name="org.ijob.bean.Resume" table="ijob_resume">
		<!—省略主键映射及属性映射 -->
		<!-- 多对一关联 -->
		<many-to-one name="seeker" class="org.ijob.bean.Seeker">       1
			<column name="seeker_id"></column>                 2
		</many-to-one>
	</class>
</hibernate-mapping>
1、name为属性名,class为“one”端类名
2、外键列列名

5.3单向一对多关联(one-to-many)

(1)one的一端应持有many端的对象集合
(2)映射文件体现一对多,代码如下:

映射文件例:
<hibernate-mapping>
	<class name="org.ijob.bean.Seeker" table="ijob_seeker">
		<!—省略主键映射及属性映射 -->
		<set name="resumes" >                                                1
			<key column="seeker_id"></key>                           2
			<one-to-many class="org.ijob.bean.Resume"/>              3
		</set>
</class>
</hibernate-mapping>
代码解析:
1、set集合节点适用于配置一对多关联关系, name属性指定one的一端对应属性名。
2、外键列列名。
3、class属性指定many端的全限定类名。


5.4双向一对多/一对一关联

(1)双向一对多特别简单,就是同时配置了单向的一对多和单向的多对一。

(2)一对一关联是特殊的一对多关联,many的一端是唯一的而不是多个。

<many-to-one name="resume" class="org.ijob.bean.Resume" column="resume_id"  unique="true" />
<one-to-one name="purpose" class="org.ijob.bean.Purpose" property-ref="resume" />

5.5多对多关联

(1)将多对多转换成两个一对多
为中间表建立实体类及映射文件,两个端点和中间端分别建立双向一对多关联

(2)

如果中间表是联合主键:
<!-- 联合主键 -->
<composite-id>
<key-many-to-one name=“**” column=“***" class=“***" ></key-many-to-one>
<key-many-to-one name=“**” column=“**" class=“**" ></key-many-to-one>
</composite-id>

5.6cascade和inverse

cascade

(1)cascade="save-update",意味着对某个对象执行save或update时,其关联对象会自动被持久化。可用于set标签和many-to-one标签
(2)cascade=“delete”,级联删除关联集合,用于set标签

(3)cascade其他选项
1、none:默认,无级联。
2、all:对应save/update/delete操作。
我们在配置级联关系时,通常将cascade设置为save-update,删除的时候最好使用手工控制。

inverse

(1)inverse属性用于one-to-many节点,默认为false。
(2)若设置为true,可强制由many的一端来做实际的外键关系维护者,即便代码是从one的一端往集合中添加数据。

【激光质量检测】利用丝杆与步进电机的组合装置带动光源的移动,完成对光源使用切片法测量其光束质量的目的研究(Matlab代码实现)内容概要:本文研究了利用丝杆与步进电机的组合装置带动光源移动,结合切片法实现对激光光源光束质量的精确测量方法,并提供了基于Matlab的代码实现方案。该系统通过机械装置精确控制光源位置,采集不同截面的光强分布数据,进而分析光束的聚焦特性、发散角、光斑尺寸等关键质量参数,适用于高精度光学检测场景。研究重点在于硬件控制与图像处理算法的协同设计,实现了自动化、高重复性的光束质量评估流程。; 适合人群:具备一定光学基础知识和Matlab编程能力的科研人员或工程技术人员,尤其适合从事激光应用、光电检测、精密仪器开发等相关领域的研究生及研发工程师。; 使用场景及目标:①实现对连续或脉冲激光器输出光束的质量评估;②为激光加工、医疗激光、通信激光等应用场景提供可靠的光束分析手段;③通过Matlab仿真与实际控制对接,验证切片法测量方案的有效性与精度。; 阅读建议:建议读者结合机械控制原理与光学测量理论同步理解文档内容,重点关注步进电机控制逻辑与切片数据处理算法的衔接部分,实际应用时需校准装置并优化采样间距以提高测量精度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值