cascade中文意思是“级联”,在程序中体现的就是: 如果一个实体类对象中含有另一个实体类对象的引用,我们就可以配置级联操作,相当于数据库中的外键操作的cascade。在配置cascade=“save_update”情况下,如果保存了其中一个对象,那么他里面包含的关联对象也就被存入数据库中了,当然这里仅仅是存入数据库当中。此时跟这个对象还没有发生关系,也就是在数据库表中外键还没有值。现在inverse属性该上场了,默认情况下inverse=“false”表明,对象间的关系“不是由对方来维护”,也就是我要维护对象间的关系,怎么维护了,如果是多对一那么就是生成update语句,如果是多对多就是在中间表中用insert插入语句。很简单。如果把inverse配置成为true,那么就表示:“关系翻转---这种关系不是‘我’来维护了,即使‘我’代表的对象中有另一个对象,或者另一些对象”,这些都不关我什么事了。
可以这么理解,cascade表示在对一个对象操作的时候,是否会‘动’其包含的对象。而inverse表示,我会不会维护对象间的关系(对应在数据库中,就是我是不是会更新记录(多对一),我是不是会插入记录(多对多))
还有一点inverse属性只会在集合下出现,其他地方不会出现,因为hibernate默认在(多对一)多的那一方维护关系比较省力。cascade默认在关联关系下都会存在。
cascade的取值有以下几种:
none:在保存,删除或修改当前对象时,不对其附属对象(关联对象)进行级联操作。它是默认值。
save-update:在保存,更新当前对象时,级联保存,更新附属对象(临时对象,游离对象)。
delete:在删除当前对象时,级联删除附属对象。
all:所有情况下均进行级联操作,即包含save-update和delete操作。
delete-orphan:删除和当前对象解除关系的附属对象。
all-delete-orphan:包含all和delete-orphan的行为。