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