Hibernate 动态更新问题

最近在做项目的时候,框架是SSH搭建的,发现一问题,请看如下列子:

GuEndorRiskDto guTempRiskDto= guEndorRiskDao.findByPrimaryKey(endorNo, planCode, riskCode);

guTempRiskDto.setStartDate("2012-02-22");
guTempRiskDto.setEndDate(("2013-02-21");
......


然后guTempRiskDto对象也没有进行其它的操作,那么当事务结束后数据库里面的startDate值会变成什么呢?

答案是:2012-02-22

 

虽然我们没有对取出来的对象进行过任何的update操作,而仅仅是对取出来的对象重新赋值,但当整个事务结束后,hibernate会动态更新你赋的新值到数据库.

之前我也挺纳闷,后来通过网上资料的查看和个人的经验总结,发现这是hibernate的一个机制:

当查询和赋值同时在一个相同的session中进行时,hibernate根据id判断是否为同一个对象,如果是,则会自动更新相应的属性值.

这样做的初衷是为了提高效率,当然我们也可以手动设定不让其自动更新,我们可以在映射文件相应属性中设置update="false"可以不用更新该字段


或者是在映射文件中的class标签里面加上:dynamic-insert="false"

就像下边这样:

<class name="com.sinosoft.XXDtoo"     table="xxx"    
         dynamic-update="false"    
         dynamic-insert="true"   
         optimistic-lock="version">

 

撰写此文,作为经验备忘

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值