Hibernate中的inverse属性和cascade属性

       假设Customer和Orders 建立一对多的双向关联.

 

inverse 属性:

//加载持久化对象

Customer customer = (Customer) session.load(Customer.class, new Integer(2));

Orders order = (Orders) session.load(Orders.class,new Integer(2));

//建立关联

order.setCustomer(customer);

customer.getOrders().add(order);

因为Hiberante 自动清理缓存中的持久化对象,按持久化状态的改变来同步更新数据库.所以尽管上面的代码只修改了

orders表中的一条记录但 还是会执行两条update 语句 ,因为内存中的持久化对象的状态发生了两次改变.

而这种多余的sql语句会影响性能.解决这种问题的办法是 把 inverse属性的值设置为 true .

总结:

影射一对多的双向关联时,因该把 one 方的inverse属性值设置为 true .

建立两个对象的双向关联时应该同时修改关联两端的属性.

 

cascade 属性:

当属性值为

 save-update : (级联保存) 时,表明保存或更新当前对象时会级联保存或更新他所关联的对象.

delete :(级联删除)  级联删除所关联的对象.

all-delete-orphan : 自动删除不再和 父对象关联的子对象.并且 在出现上面两种情况时执行上面两种的功能.

可以说是一个全自动的属性值.

一般情况下,当关联双方存在父子关系.就可以把父方的cascade 属性值设置为all-delete-orphan.

父子关系: 由父方来控制子方的生命周期.子对象必须和一个父对象关联.子对象不可孤立存在.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值