开发中的小囧事(1)——做查询操作时会打印一堆update 语句???!!!

问题发现:开发中习惯打印sql语句。单纯的做查询的操作的时候无意间发现后台竟然打印了一堆select,紧接着又是一堆update.....。此时勾引起了我强烈的好奇心,为什么做查询的时候会update呢。 

纠结的定位问题所在:debug了一番,问题的神秘感骤然增强,原因是,执行完hibernate的find方法之后立马就打印出了一堆update,并没有ajax异步提交。此时想了想hibernate查询的时候会先看缓存中是否有数据,若有的话会先从缓存中拿,若没有的话会直接去数据库取,然后将取得的数据再同步放到缓存中。又纠结了,即便是这样那也不会做update呀,做update的唯一可能就是缓存中的数据被修改导致和数据库中的数据不同步。无奈的看看配置文件、看看pojo类,不看不要紧一看吓一跳,NND,为了偷懒不小心在setter方法中对时间戳赋了个new Date(),而并不是参数传入到方法中的。

问题详细解析:由于setter里边被赋入了new Date(),所以从数据库中查出来往缓存里边放的时候并没有将数据库中的时间戳放到setter里而是setter方法里自己new 了一个Date,那么,Hibernate发现新设置的时间戳和数据库中存的时间戳值不一样,因此Hibernate就会自动将缓存中的数据同步到数据库中。此时就会执行一堆的update。

悲剧的教训:当时修改pojo类的时候想着时间戳不就是在创建对象的时候给赋个值嘛,直接搞到setter里边以后在创建的时候也不用往进set了。规范还是很重要的,不要轻易挑战,呵呵。像这样的属性直接在声明的时候给赋上值就OK了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值