Hibernate中持久化上下文的flush操作之一COMMIT
阿新 • • 發佈:2019-02-16
在Hibernate中持久化上下文的flush操作模式中,JPA還支援COMMIT(JPA只支援AUTO和COMMIT兩種)。對於COMMIT的flush操作模式,JPA針對HQL查詢和native SQL查詢有不同的執行:
- 對於HQL查詢,無論是否涉及到了被緩衝的Entity物件,都只會在當前事務提交的時候執行flush操作
- 對於native SQL查詢,如果涉及到了被緩衝的Entity物件,將會執行flush操作
1.HQL查詢
txn = entityManager.getTransaction(); txn.begin(); Person person = new Person("John Doe"); entityManager.persist(person); entityManager.createQuery("select p from Advertisement p") .setFlushMode( FlushModeType.COMMIT) .getResultList(); entityManager.createQuery("select p from Person p") .setFlushMode( FlushModeType.COMMIT) .getResultList(); //flush executed txn.commit();
2.native SQL查詢
Person person = new Person("John Doe");
entityManager.persist(person);
//flush executed
entityManager.createNativeQuery("select count(*) from Person").setFlushMode( FlushModeType.COMMIT).getSingleResult();