Hibernate中持久化上下文的flush操作模式默认即为AUTO。在这种模式下,flush操作往往在如下场景下自动执行:
- 遇到持久化上下文的事务提交,那么在事务提交之前执行flush操作
- 在即将执行的HQL查询中涉及到了被缓冲的Entity对象
- 在即将执行的native SQL查询中涉及到了被缓冲的Entity对象
下面以JPA的EntityManager为例介绍flushMode="AUTO"的各个场景。
1.持久化上下文提交事务
entityManager = entityManagerFactory().createEntityManager();
txn = entityManager.getTransaction();
txn.begin();
Person person = new Person( "John Doe" );
entityManager.persist( person );
//flush executed
txn.commit();
2.即将执行的HQL查询中涉及到了被缓冲的Entity对象
Person person = new Person( "John Doe" );
entityManager.persist( person );
entityManager.createQuery( "select p from Advertisement p" ).getResultList();
//flush executed
entityManager.createQuery( "select p from Person p" ).getResultList