inverse与cascade都是用于一对多,多对多关系的,一般会同时出现在维护关系的那一方,另一方失去控制权,用来描述两者间的关系。
要小心的是,若是开启了级联,控制方可以控制双方表和中间关系表,例如范围如果是save,两表是A,B,中间关系表是m表,A为控制方
那么好处在于:session.save操作时,往A中插入元素,会被认为是往3个表里插入新元素,与A相关的B中元素会检查没有后自动插入,与A相关的m中元素会检查没有后自动覆盖
坏处在于:注意对中间关系表m是覆盖,也就是说原先的数据可能会丢失,具体就是Hibernate会删掉关系表m中与A相关的B中元素相关的m中元素,如果是一对多关系就不会有这种情况,一对多可以放心使用级联。
1 inverse:
两者间的关系由谁来维持,默认是双方都可以维持这个中间关系,像多对多关系就会产生一个中间表,指明谁来维持这个关系表,可以节省性能,最好都是false。
直译为控制反转与否,默认值为false,false则控制权掌握自己手里,true则掌握他人手里,不能两个true,不然没人控制中间表,就会造成中间表没人更新的情况
2.cascade:级联更新的范围设置
inverse指明谁维持关系表后,cascade指明什么情况下可以对对方的表进行更新,注意不是中间表了
默认值为None
all: 所有情况下均进行关联操作,即save-update和delete。
none: 所有情况下均不进行关联操作。这是默认值。
save-update: 在执行save/update/saveOrUpdate时进行关联操作。
delete: 在执行delete 时进行关联操作。
all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点