hibernate 中的Inverse Cascade

本文通过实验探讨了ORM中inverse和cascade属性的作用。inverse决定了哪一方维护关系表,而cascade则控制是否同步更新关联实体。文章通过具体示例展示了不同配置下数据库操作的区别。

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

inverse 原意:反转。这里理解为让对方做事。也就是inverse=true关系让对方维护,为false为双方维护。多对多中维护的意思就是增加或者更新实体记录时,是否增加或者更新关系表的记录(当然,此时要求对象中要有set集合,这样才有意义)。一对多中,是否是表示在多的一方表中增加记录,

在多对多关系中,cascade表示是否在子表中创建或更新记录(也就是cascade涉及实体记录),而inverse表示是否在关系表(intermediary table,不涉及实体记录)中创建或者更新记录。


实验一,多表中Inverse 和Cascade :

多表关系  Graduate   t_gt  Tutor

 

 



 

 

 

学生bean维护了老师beanset集合,

实例化一个学生对象,然后再在其中添加两个老师对象。


 

 

开始实验:注意我的inverse和cascade都在Graduate.hbm.xml配置

1、inverse =false  cascadenone(没有配置)

 

可以看出,inverse为false时,graduate和turor都为父表,都可以维护关系,所以save graduate1的时候,会向关系表t_gt中插入表示graduate和turor关系的数据。但是,由于没有设置cascade=save-update,导致当hibernate想要向turor表插入set集合中的数据的时候被拒绝了。

2、inverse =true cascadenone(没有配置)

只有一条sql语句

 

inverse =true,关系由turor去维护,导致save  graduate1的时候,不用去维护关系表。所以只产生了一条语句。

3、inverse =false  cascade=save-update

 

4、inverse =true cascade=save-update

 


inverse =true 关系由turor去维护,cascade=save-update表示允许将graduate1中set集合中的数据插入turor表



实验二 one to many 



测试save user


实验开始:注意我的inverse和cascade都在User.hbm.xml配置

1. inverse=false cascade为none


inverse=true cascade为none



1、2没有设置cascade=save-update,所以都没有保存关联的实体

3 inverse=false cascade为save-update




4.inverse=true cascade为save-update




注意case4中,有inverse=true,则表示关系由order去维护,只有我主动save order实体的时候,才会将表示两个实体间关系的uid进行更新






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值