在Hibernate中,针对持久化实体的配置文件中有Cascade这样一个属性,顾名思义就是级联,也就是说在操作当
前实体时,针对当前实体的操作会影响到相应配置的关联实体。比如针对当前实体进行保存操作时,会同时保存
与其关联的实体,当然这种额外操作的产生取决于你是否在当前实体的配置文件中对关联实体的元素配置了
Cascade属性。
而需要进行级联的操作可能涉及到增加,修改,删除等相应的数据库操作,具体Cascade的取值则
分为多种,如all,表示针对所有操作都会进行级联,如save-update,表示针对插入和修改会进行级联操作。对
于Cascade的取值问题需要根本具体需求而定,这里没有一个统一的标准应该取怎样的值符合你的需要。从现实
需求分析来决定应该如何取值。
all :: 所有情况下均进行关联操作。
none: 所有情况下均不进行关联操作。这是默认值。
save-update: 在执行save/update/saveOrUpdate时进行关联操作。
delete: 在执行delete时进行关联操作。
all的意思是save-update + delete
all-delete-orphan 的意思是当对象图中产生孤儿节点时,在数据库中删除该节点
举个例子说一下all-delete-orphan:
Category与Item是一对多的关系,也就是说Category类中有个Set类型的变量items. 举个例子,现items中存两个
Item, item1,item2,如果定义关系为all-delete-orphan当items中删除掉一个item(比如用remove()方法删除
item1),那么被删除的Item类实例将变成孤儿节点,当执行category.update(),或session.flush()时hibernate同
步缓存和数据库,会把数据库中item1对应的记录删掉。
参考博客: