zoukankan      html  css  js  c++  java
  • 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方法会强制与数据库同步。

  • 相关阅读:
    Add Two Numbers
    Reverse Linked List II
    Reverse Linked List
    Remove Duplicates from Sorted List
    Remove Duplicates from Sorted List II
    Partition List
    Intersection of Two Linked Lists
    4Sum
    3Sum
    2Sum
  • 原文地址:https://www.cnblogs.com/baizhanshi/p/7685398.html
Copyright © 2011-2022 走看看