11.27--一对多关联映射

一对多关联映射中,多对一与一对多的区别在于关系维护的方向。多对一关注多指向一的关系,加载多时加载一;一对多关注一指向多,加载一时加载多。在实践中,通常在多的一端维护关系,使用<key>和<many-to-one>标签,并设置inverse属性为true使一端失效,避免数据混乱。cascade属性则控制操作的连锁反应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

##一对多关联映射


单向

一对多和多对一映射原理是一样的,都是在多的一端加入一个外键指向一的一端;

区别在于维护的关系不同:

  • 多对一维护的关系:多指向一的关系,如果维护了多指向一的关系,那么加载多的时候会把一加载上来;
  • 一对多维护的关系:一指向多的关系,如果维护了一指向多的关系,那么加载一的时候会把多加载上来。

classes——》student

table-classes: id , name

classes.java: id,  name,  Set < Student > students

classes.xml: id , name , 
< Set name="students" cascade="">
	cascade级联操作属性:save-update、delete、all、none。
	< key column="classId" /> //classId,谁维护谁加classes
	< one-to-many  class="com.entity.Strudent" />
< /Set >

classes.xml

table-student: id, name , classId

student.java: id, name, 

student.xml: id , name,

student.xml

在一一端维护关系存在缺陷:

因为多的一端student不知道classes的存在(也就是student没有维护与classes的关系),所以在保存student的时候关系字段classesId是为null的,如果将该字段设置为非空,则将无法保存数据

另外,因为student不维护关系,而classes维护关系,classes就会发出多余的update语句,保证classes和student有关系,这样加载classes的时候才可以把该classes对应的学生加载上来。

映射双向的目的是,有时候不是因为需求,而是为了让多的一端维护关系
存储,加载


双向

student.xml

采用一对多双向关联映射的目的主要是为了解决一对多单向的缺陷,而不是需求驱动。

一对多双向关联的映射方式:

  • 在一的一端的集合上采用< key>标签,在多的一端加入一个外键
  • 在多的一端采用< many-to-one>标签

< key>标签和< many-to-one>标签加入的字段保持一致,否则会产生数据混乱

inverse属性:

inverse属性可以用在一对多和多对多双向关联上,inverse属性默认为false,为false表示本端可以维护关系,如果inverse为true,则本端不能维护关系,会交给另一端维护关系,本端失效
所以,一对多关联映射我们通常在多的一端维护关系,让一的一端失效,故设置为inverse=“true”

inverse和cascade

inverse是控制方向上的反转,只影响存储
cascade是操作上的连锁反应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值