zoukankan      html  css  js  c++  java
  • 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()之间,就保证在不清理缓存的情况,数据的一致性

  • 相关阅读:
    [离散数学II]2017.5.9
    mysql内连接、左连接、右连接
    Android平台介绍
    软技能(面试)1
    流程控制练习题
    函数:算法
    linux系统文件
    App测试需注意
    python-循环
    python-正则表达式
  • 原文地址:https://www.cnblogs.com/lxh520/p/9010031.html
Copyright © 2011-2022 走看看