Hibernate的Cascade和Inverse属性

本文详细介绍了Hibernate中Cascade属性的多种取值及其作用,包括none、save-update、persist等,以及Inverse属性的false和true值的区别和使用场景。通过实例展示了如何在一对多关联关系中合理设置这些属性以优化性能。

       Cascade:设置级联操作的程度。

       Inverse:是否放弃维护级联关系。

Cascade属性的取值有:

1、none:忽略其他关联的对象,默认值。

2、save-update:当session通过save(),update(),saveOrUpdate()方法来保存或更新对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象。

3、persist:当session通过persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象。

4、merge:通过Session的merge()方法来保存当前对象时,会级联融合所有关联的游离对象。

5、delete:通过delete()删除当前对象时,会级联删除所有关联的对象。

6、lock:通过lock()把当前游离对象加入session缓存时,会把所有的游离对象也加入Session缓存中。

7、replicate:通过replicate()复制当前对象时,会级联复制所有关联的对象。

8、evict:通过evict()清除session缓存中对象时,会级联清除所有关联的对象。

9、refresh:通过refresh()刷新当前对象时,会级联刷新所有关联的对象。(刷新是指同步更新session缓存中数据)

10、all:save-update(),persist(),merge(),delete(),lock(),replicate(),evict()及refresh()的行为。

11、delete-orphan,删除所有和当前对象时,解除关联行为的对象。

12、all-delete-orphan; 通过delete()删除当前对象时,会级联删除所有关联的对象。

Inverse属性的取值有:

inverse=false 的为主动方,inverse=true 的为被动方, 由主动方负责维护关联关系。

Inverse设值:在没有设置 inverse=true 的情况下,父子两边都维护父子关系

Inverse结论:

1.在映射一对多的双向关联关系时,应该在one方把inverse属性设为true,这可以提高性能。

2.在建立两个对象的关联时,应该同时修改关联两端的相应属性:

   customer.getOrders().add(order);

   order.setCustomer(customer);

这样才会使程序更加健壮,提高业务逻辑层的独立性,使业务逻辑层的程序代码

不受Hibernate实现类的影响。同理,当删除双向关联的关系时,也应该修改

关联两端的对象的相应属性:

Customer.getOrders().remove(order);

Order.setCustomer(null);

转载于:https://www.cnblogs.com/springside4/archive/2011/12/26/2481084.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值