zoukankan      html  css  js  c++  java
  • Hibernate-清理一级缓存

    Session执行一些sql语句把内存中的对象的状态同步到数据库,这个过程被称为session清理.

    在默认情况下,Session会在下面的时间点清理缓存。

    1 当应用程序调用net.sf.hibernate.Transacation的commit()方法的时候,commit()方法先清理缓存,然后再向数据库提交事务。 
    2 当应用程序调用Session的find()或者iterate()时,如果缓存中持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。 
    3 当应用程序显示调用Session的flush()方法的时候。

    注意Session的commit()和flush()方法的区别。

      flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;
      commit()方法会先调用flush()方法,然后提交事务。提交事务意味着对数据库所做的更新被永久保存下来。

    执行session清理的顺序:

    1.按照应用程序调用session.save()方法的衔后顺序,执行所有对实进行插入的insert语句。
    2.执行所有对实体进行更新的update语句。
    3.执行所有对集合进行删除的delete语句。
    4.执行所有对集合元素进行删除、更新或者插入的SQL语句。
    5.执行所有对集合进行插入的insert语句。
    6.按照应用程序调用session.delete()方法的先后顺序,执行所有对实体进行删除的delete语句。
    Session的setFlushMode()方法用于设定清理缓存的时间点。FlushMode类定义了三种不同的清理模式:FlushMode.AUTO、FlushMode.COMMIT和FlushMode.NEVER。

     清理缓存的模式

     Session的查询方法

     Session的commit()方法

     Session的flush()方法

     FlushMode.AUTO  清理  清理  清理
     FlushMode.COMMIT  不清理  清理  清理
     FlushMode.NEVER  不清理  不清理  不清理

    在批量处理大量数据的时候为了避免内存溢出,可手动干预一级缓存:

    Session.evict 将某个对象从一级缓存移除;如:getSession().evict(member);

    Session.clear 清理该session的所有缓存对象。

  • 相关阅读:
    第五周作业
    关于结对编程的理解
    第四周作业
    总结
    总结
    总结
    总结
    总结
    判断树、判断表
    总结
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4502245.html
Copyright © 2011-2022 走看看