1. 程式人生 > >Hibernate中持久化上下文的flush操作之一COMMIT

Hibernate中持久化上下文的flush操作之一COMMIT

在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();