持久层框架hibernate遇到的小问题

Hibernate未进行save操作事务提交后DB却更新了,今天工作时,遇到了这个问题,很有意思,但原因很简单。

详细叙述问题

  • 没有save操作,事务提交后,db更新了。

原因

  • 一开始我以为是上了更新锁的原因 ,我便注释掉了更新锁。
Criteria criteria = getSession()
                .createCriteria(DemoModel.class)
                .add(Restrictions.eq("xId", xId))
//              .setLockMode(LockMode.UPGRADE_NOWAIT)
                .setMaxResults(1);

运行结果没有更新,那是肯定的,因为不上更新锁,即便是save了,也不会更新。

  • 后来搜了一下才知道,原来是hibernate的快照机制。即一级缓存会将数据库查出的数据保存快照,如果事务提交后,数据与快照中的不符合,就会进行更新操作。

总结

之前我只形而上学知道持久层框架是有一级缓存和二级缓存的,但随着使用memcache、redis等缓存,就忽略了这些。具体想了解的话,搜索hibernate(或mybatis)一级缓存、二级缓存,这里就不详细解释了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 结果的简单,起点的复杂 在生活工作中,我们常常会看到一些成功人士在做成一件事时,往往轻而易举、非常顺利。这就是知行...
    无畏的小强阅读 354评论 1 2
  • 红的,绿的,黄的,紫的,蓝的,黑的与白的 光 里充斥着或弱,或强,或尖,或润,或引人安静,或迫人狂躁的 声 中有可...
    SAIN9阅读 272评论 0 1
  • 秋荷一滴露,清夜坠玄天;将来玉盘上,不定始知圆。而我,竟然发现了这最美的露珠竟然不在荷叶上。 雨后清晨,漫步山山林...
    蓝田玉儿阅读 866评论 0 10
  • 昨夜梦到Tom Cruise还有另一位重量级的好莱坞男演员都爱上了我。 Tom Cruise好像还和一位来自Lon...
    唐小山阅读 234评论 0 0