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-2025 CODEPRJ.COM