美文网首页后端应用技术Java 杂谈程序员
持久层框架hibernate遇到的小问题

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

作者: q松_松q | 来源:发表于2018-10-19 10:35 被阅读2次

    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)一级缓存、二级缓存,这里就不详细解释了。

    相关文章

      网友评论

        本文标题:持久层框架hibernate遇到的小问题

        本文链接:https://www.haomeiwen.com/subject/akmszftx.html