flush和reflush


/**
     * jpa 中的reflush 同 hibernate 中 Session 的 refresh 方法. 
     * 
     * reflush 会强制发送sql查询(select)语句,使缓存中的数据和数据库中的数据保持一致,数据由数据库到缓存
     * flush 会强制发送sql更新(update)语句,使数据库中的数据和缓存中的数据保持一致,数据由缓存到数据库
     * 
     * 注意:当对缓存中的数据进行一系列操作后,一般提交事务时,会调用flush方法,把数据库更新一下
     *      但在commit或flush之前调用reflush,那么缓存中的数据又变成了和数据中的数据一样的了,你原先修改的数据白费了
     */
    @Test
    public void testRefresh(){
        Customer customer = entityManager.find(Customer.class, 1);
//      customer = entityManager.find(Customer.class, 1);
        customer.setAge(1);
//      entityManager.flush();
        System.out.println("-->"+customer);
        entityManager.refresh(customer);
        System.out.println("---->"+customer);
    }
    
    /**
     * jpa中的flush 同 hibernate 中 Session 的 flush 方法. 
     * 默认情况下,在提交事务的时候会刷新缓存(即调用flush方法)
     * 
     * 手动调用,会立刻强制发送sql更新(update)语句,使数据库中的数据和缓存中的数据保持一致
     * 但数据库中的记录还没有变,因为还没有提交事务
     * 
     */
    @Test
    public void testFlush(){
        Customer customer = entityManager.find(Customer.class, 1);
        System.out.println(customer);
        
        customer.setLastName("1113");
        System.out.println("----");
        entityManager.flush();
        
        System.out.println("----11");
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2026 CODEPRJ.COM