• hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别


    首先session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,一级缓存的生命周期和session是一样的,

    session.flush()和session.clear()就针对session的一级缓存的处理。

       简单的说,

    1 session.flush()的作用就是将session的缓存中的数据与数据库同步。

    2 session.clear()的作用就是清除session中的缓存数据(不管缓存与数据库的同步)。

    3.session.refresh():会强制发送select语句,以使session缓存中对象的状态和数据表中对应的记录保持一致。该方法的有效性需要配置事务的隔离级别为read commited(读已提交)。

    注意:

    执行完session.flush()时,并不意味着数据就肯定持久化到数据库中的,因为事务控制着数据库,如果事务提交失败了,缓存中的数据还是照样会被回滚的。

    举例:

    @Test   
        public void testFlush(){  
            Session session =  HibernateUitl.getSessionFactory().getCurrentSession();  
            session.beginTransaction();  
            Teacher t = (Teacher) session.get(Teacher.class, 3);  
            t.setName("yyy");  
       
            t.setName("yyyyy");  
            session.getTransaction().commit();  
        } 
    

      看这段代码,我们setName() 2次, 但程序只会更改数据库一次,在commit时。

    @Test    
        public void testFlush(){  
            Session session =  HibernateUitl.getSessionFactory().getCurrentSession();  
            session.beginTransaction();  
            Teacher t = (Teacher) session.get(Teacher.class, 3);  
            t.setName("yyy");  
            session.flush();//有flush会执行2次UPDAE,没有会只执行一次  
            t.setName("yyyyy");  
            session.getTransaction().commit();  
        } 
    

      我们在第2次setName()时 执行session.flush().

    再看hibernate 执行的sql 语句
    
    Hibernate:   
        update  
            Teacher   
        set  
            birthday=?,  
            name=?,  
            title=?   
        where  
            id=?  
    Hibernate:   
        update  
            Teacher   
        set  
            birthday=?,  
            name=?,  
            title=?   
        where  
            id=?  
    

      

    执行了2次Update

    所以看出来flush方法会强制与数据库同步。

  • 相关阅读:
    jquery封装的时间轴
    openlayers实现多图显示
    wms常用操作
    教你如何拔取百度地图POI兴趣点
    北京市地铁线路及站点数据
    Arcgis for js实现北京地铁的展示
    Openlayers 2.X加载高德地图
    Arcgis for js加载百度地图
    常用公共服务接口与java调用实现
    Openlayers 2.X加载天地图
  • 原文地址:https://www.cnblogs.com/baizhanshi/p/7685398.html
Copyright © 2020-2023  润新知