hibernate 中的Inverse Cascade
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进行更新