Hibernate入门学习【四】

cascade与inverse

作用

  • cascade用于联级操作,在Hibernate中持久化一个临时对象时,默认情况下不会自动持久化所关联的其他临时对象,而是会抛出TransientObjectException。如果设定many-to-one元素的cascade属性为save-update的话,可实现自动持久化所关联的对象,相应的设置delete可以联级删除。
  • inverse可以译为是否放弃维护关联关系,作用是在hibernate中是通过inverse的设置来决定是由谁来维护表和表之间的关系的。

cascade

cascade 有五个选项 分别是: all ,delete ,none,save-update,delete-orphan ;

  • all : 所有情况下均进行关联操作。
  • none:所有情况下均不进行关联操作。这是默认值。
  • save-update:在执行save/update/saveOrUpdate时进行关联操作。
  • delete:在执行delete时进行关联操作。
  • delete-orphan: 当save/update/saveOrUpdate时,相当于save-update ;当删除操作时,(表结构没有父子关系时)相当于delete ;(有父子结构关系时,当两者解除关系,附表成为孤儿,删掉该孤儿,主表仍存在哦)

在一对多或者多对多的关系中,一般在cascade的源头上插入或是删除,所有cascade的关系就会被自己动的插入或是删除,一般而言单向关联把cascade加在主表(举个例子,客户与订单,删掉客户相应订单一定都删除了,但是我们不希望删除了一个订单却把客户都删除,当然也可以根据自己的需要:操作哪一方就在哪一方文件里面配置),双向关联双方都要在映射文件中配置。

注意事项:级联增加必须外键字段设置为空.
对于联级增加执行过程

  • 插入主键表的主键
  • 插入外键表的数据
  • 在将主键表的主键值更新到外键键字段。

若是不设置为null,则会在第二步抛空异常。

inverese

实际上inverse属性决定了是否对set的改动反映到数据库中去,为了维护数据的一致性而存在。默认情况下inverse属性的值为“false”。
双向关联中双方都(默认)设置 inverse=false的话,必会导致双方都重复更新同一个关系,所以会产生多余的SQL语句,但是如果双方都设立inverse=true的话,双方都不维护关系的更新。
一对多的关系中是默认了让多的一方维护关系设置inverse=false,一的一方为inverse=true;一般是在双向、外键关系中才设置inverse的值。

inverse也会影响联级关系
若是己方维护关系,对方放弃维护那么对方设置的联级关系将会失效,反之亦然。

区别

  • cascade描述的是对象与对象之间的关系,inverse定义的是关系和对象的级联关系。
    inverse属性用于指示本方是否参与维护关系,设为true时不维护,设为false时维护
  • cascade对关系标记都有效
    inverse只对set+one-to-many(或many-to-many)有效,对many-to-one, one-to-one无效。
  • cascade对集合对象中的一个一个元素起作用,如果集合为空,那么cascade不会引发关联操作。inverse对集合对象整体起作用,
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值