您的位置:首页 > 其它

hibernate 中的Inverse Cascade

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

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

实验一,多表中Inverse 和Cascade :

多表关系 Graduate t_gt Tutor









学生bean维护了老师bean的set集合,

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



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

1、inverse =false cascade为none(没有配置)



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

2、inverse =true cascade为none(没有配置)

只有一条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



2 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进行更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate inverse cascade