13 级联和关系维护(Cascade 和Inverse)

Cascade用来说明当对主对象进行某操作时, 是否对其关联的从对象也作类似的操作.

例如:删除主对象的同时 要不要删除从对象, 主对象不存在了,从对象理理论上出应删除.


常用的Cascade:  none , all, save-update , delete , lock , refresh , evict , replicate , persist, merge, delete-orphan(一对多,删除孤儿)


一般, 多对多, 多对一, 不设级联.  一对一, 一对多 中设置级联.






--------------------------------------------------------------------------------------------------

(Hibernate开发指南 作者:夏昕)


Inverse和Cascade


Inverse,直译为“反转”。在Hibernate语义中,Inverse指定了关联关系中的
方向。
关联关系中,inverse=”false”的为主动方(默认值),由主动方负责维护关联关系。具体可
参见一对多关系中的描述。


我补充:

      一般只能给<set><list>等集合标签设置 inverse


     "一对多"中,  一般在"一"的一方放弃维护权(inverse=”true” ).


     "多对多"中,无主从方, 有任意一方放弃维护权(inverse=”true” )都可以.

      前面做过的"老师"与"学生"的练习中:

            第一种维护关系的方法:  为老师set()学生,  不能为学生set () 老师 ,  SQL可以正确执行(否则中间表主键冲突).

            第二种维护关系的方法:  为老师set () 学生,  为学生se () t老师, 设置一方 放弃维护权(inverse=”true” ),  就可以正确执行.

 

 

-----------------------------------------------------------------------------------------------------------------------------------------
而Cascade,译为“级联”,表明对象的级联关系,如TUser的Cascade设为all,

就表明如果发生对user对象的操作,需要对user所关联的对象也进行同样的操作。如对
user对象执行save操作,则必须对user对象相关联的address也执行save操作。
初学者常常混淆inverse和cascade,实际上,这是两个互不相关的概念。Inverse
指的是关联关系的控制方向,而cascade指的是层级之间的连锁操作。

你可能感兴趣的:(sql,Hibernate)