Hibernate映射一对多单向关联(之三)

本文介绍如何在Hibernate中配置一对多级联删除,并通过示例演示如何删除一个学生及其所有相关课程记录。

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

Hibernate映射一对多单向关联(之二)中,可以检索出一个Student所对应的所有课程,放在一个HashSet中。

如果一个学生的记录被删除了,就应该考虑到它的其他信息也全部删除掉,比如他的全部课程记录。

将Student.hbm.xml中cascade值设置为如下:

cascade="all"

或者

cascade="all-delete-orphan"

cascade="all",既能满足我们save-update的需要,又能实现级联delete。cascade="all-delete-orphan",则如果还有很多与Student有关的表,则所有这些表中的记录都会被级联删除掉。

如果不需要级联存储更新,即save-update,则cascade可以设置为delete。

假设我们要删除了学号为200802001的Student,同时删除他的所有课程记录。

 

测试程序如下:

 

 

执行结果:

Hibernate: select this_.sno as sno0_, this_.sname as sname0_0_, this_.dept as dept0_0_ from student this_ where this_.sno=?
Hibernate: select scs0_.sno as sno1_, scs0_.cno as cno1_, scs0_.sno as sno0_, scs0_.cno as cno0_, scs0_.cname as cname4_0_, scs0_.score as score4_0_ from sc scs0_ where scs0_.sno=?
Hibernate: delete from sc where sno=? and cno=?
Hibernate: delete from sc where sno=? and cno=?
Hibernate: delete from sc where sno=? and cno=?
Hibernate: delete from student where sno=?

 

大概的过程就是:先检索出Student对应于Sc中的记录,通过Student的对象获取Sc的HashSet记录集,再set到Student的对象中。在删除Student的对象的时候,级联删除了所有对应于该Student的Sc中记录。

一对多双向关联中,多对一单向关联和Hibernate映射多对一单向关联(之一)、Hibernate映射多对一单向关联(之二)是一样的。

 

一对多单向关联也可以是一对多双向关联,因为一对多不会产生冗余。

不像多对一关联,多对一是单向关联,如果多对一双向关联就产生冗余。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值