Hibernate---inverse,cascade总结

日常项目中,我们用的比较多的是many-to-one模式,因此做了上述的一个总结。

其实那只是hibernate的特性和使用规则,真正项目中要看如何灵活配置和应用。可以从业务需求,代码性能和代码量上考虑。

对于业务需求,比如在一些应用中,我们提供了删除用户和部门的功能但是实际要求是当删除部门时,不能将用户的数据真正删除掉,那么此时就要考虑,在部门那一端,不能设置cascade=delete或者all

从性能上考虑,无法是减少session的开启次数以及同数据库的交互次数,对于session开启次数的讨论不在本文,但是为了减少和数据库通信次数,那么就要控制发出的sql语句数。举个例子:

Seal 和 BranchInfo 如果在set中设置inverse=false那么保存或更新branchinfo是将会级联更新与之相关的所有seal记录,但是如果交给seal去维护关系,当保存seal时去更新关系,大家可以做一个测试,此时不会发出更新语句,会发出如下语句,注意红色部分:

Hibernate: insert into tbranchinfo (address, depname, id) values (?, ?, ?)
Hibernate: insert into tseal (sealName, branchInfoId, id) values (?, ?, ?)
Hibernate: insert into tsealmodel (id) values (?)

之所以能保存tbrachinfo是因为在many-to-one中设置了cascade=save-update。

综上我们建议让many-to-one一端(就是多的一端)去维护关系,级联保存一的一端,同时配合在一的一端设置lazy=true延迟加载集合对象来优化性能。

当然对于一级和二级缓存,用的较多的是一级缓存。二级缓存需要根据实际项目来设置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值