hibernate 中的Inverse Cascade

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

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


实验一,多表中Inverse 和Cascade :

多表关系  Graduate   t_gt  Tutor

 

 hibernate 中的Inverse Cascade

hibernate 中的Inverse Cascade

hibernate 中的Inverse Cascadehibernate 中的Inverse Cascade

 

 

 

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

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

hibernate 中的Inverse Cascade

 

 

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

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

 hibernate 中的Inverse Cascade

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

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

只有一条sql语句

 hibernate 中的Inverse Cascade

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

3、inverse =false  cascade=save-update

 hibernate 中的Inverse Cascade

4、inverse =true cascade=save-update

 

hibernate 中的Inverse Cascade

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



实验二 one to many 

hibernate 中的Inverse Cascadehibernate 中的Inverse Cascade


测试save user

hibernate 中的Inverse Cascade

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

1. inverse=false cascade为none

hibernate 中的Inverse Cascade

inverse=true cascade为none

hibernate 中的Inverse Cascade


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

3 inverse=false cascade为save-update


hibernate 中的Inverse Cascade

hibernate 中的Inverse Cascade

4.inverse=true cascade为save-update

hibernate 中的Inverse Cascade

hibernate 中的Inverse Cascade


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