• Hibernate session的flushMode 属性


    https://blog.csdn.net/looyo/article/details/6309136

    这里面的清理缓存可以理解为hibernate自动执行了一次 session.flush();

    选择什么样的flush mode就是采取对hibernate session采取什么样的数据刷新的策略。 Session.setFlushMode()用于设定清理缓存的时间点。
    对比一下几种flush mode:
    FlushMode.AUTO: 调用Session的查询方法时,清理缓存,注意:这条规则必须保证显式开启的事务中,对于outside a transaction 调用Session.commit()时,清理缓存 调用Session.flush()时,清理缓存
    FlushMode.COMMIT: 调用Session的查询方法时,不清理缓存 调用Session.commit()时,清理缓存 调用Session.flush()时,清理缓存
    FlushMode.NEVER(MANUAL): 调用Session的查询方法时,不清理缓存 调用Session.commit()时,不清理缓存 调用Session.flush()时,清理缓存

    FlushMode.ALWAYS:测试未发现和auto有什么区别。

     调用Session的查询方法时,清理缓存,注意:这条规则必须保证显式开启的事务中,对于outside a transaction 调用Session.commit()时,清理缓存 调用Session.flush()时,清理缓存

    =================

    三种情况分别在以下时机同步数据库 session.flushmode=manual 1.只有手动调用flush()

    session.flushmode=commit 1.手动调用flush() 2.commit()时候

    session.flushmode=auto 1.手动调用flush() 2.commit()时候 3.查询前 (经过测试(oracle驱动),必须在事务内,不确定是否全部情形)

    ==================

     

    对比一下,请注意FlushMode.NEVER 如果在调用Session的查询方法之前,不清理缓存,那么就会引入脏数据 所以会有那一步 session.flush(); // who know's what been done till now 在FlushMode.NEVER之前,将缓存清理,保证数据正确。
    在文中最后一段程序中: 将FlushMode.NEVER夹在两个session.flush()之间,就保证在不清理缓存的情况,数据的一致性

  • 相关阅读:
    箭头函数和普通函数的this指向问题
    npm源切换
    移动端穿透问题
    let作用域问题
    react服务端渲染(十一)引入样式&&一些优化
    react服务端渲染(十)404&&301页面实现
    react服务端渲染(八)路由改写
    react服务端渲染(九)proxy代理&&多级路由&&数据的脱水和注水
    react-router 使用
    2017.11.01 ExecuteNonQuery、ExecuteScalar、ExecuteDataSet、FillDataSet 流程
  • 原文地址:https://www.cnblogs.com/lxh520/p/9010031.html
Copyright © 2020-2023  润新知