/** * 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"); }