Hibernate<五> 级联和关系维护

点点圈 提交于 2019-11-30 15:03:55

1、Hibernate中的级联操作:

在Hibernate中,针对持久化实体的配置文件中有Cascade这样一个属性,就是级联,也就是说在操作当前实体时,针对当前实体的操作会影响到相应配置的关联实体,比如针对当前实体进行保存操作时,会同时保存于其关联的实体。常用的cascade:

none,all,save-update,delete,lock,refresh,evict,replicate,persist,merge,delete-orphan(one-to-many)。

一般情况下,many-to-one,many-to-many不设置级联,在<one-to-one>和<one-to-many>中设置级联。

①、在一对一关联关系中,当删除当前实体时,会同时级联删除关联实体,以解除两者的关联关系。

②、在一对多关联关系中,当删除一方实体时,会同时级联删除多方实体,以解除两者的关联关系。

③、在多对多关联关系中,根据我们对于多对多关联关系的不同处理情况,相应的级联删除行为会有所不同,如果将多对多的关联关系处理为两个一对多的关联关系时,也就是说存在一个中间实体用以表明两者的多对多关联关系,那么在删除其中一方实体时,相应的级联删除操作并不会直接删除中间实体,也就是两者的关联关系,而是在中间实体中将其中一方设置为null,这样两者的关联关系就相应的移除了。如果我们将多对多关联关系不作特殊处理,将之当做纯粹的多对多关联关系,也就是说没有相应的中间实体,而只是在数据库中保持一个中间表来维护两者的关系,那么当我们删除一方实体时,会相应的将数据库中的中间表的相应数据给直接删除。

2、Hibernate中的inverse

inverse常用于一对多双向关联和多对多关联关系中,inverse的含义是,是否放弃维护关联关系,在onet-to-many和many-tomany的集合定义中使用,inverse="true"表示该对象不维护关联关系。该属性在有序集合中(list,array)通常设置为false。onet-to-many维护关联关系就是更新外键,many-to-many维护关联关系就是在中间表增减记录。

注意;①、inverse只存在于集合中。

         ②、Hibernate不允许多的一端放弃维护关系。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!