關於 close jpa 的 EntityManager:
裡面說到了非常重要的觀念,就是當 EntityManger 跟 transaction 綁在一起使用時,若是 在 transaction 的過程中發生問題沒有被完整的 commit 或 rollback 的話(也就是當transaction沒有正常被關掉時),即使已經呼叫了 entityManager 的 close() 也不會馬上將 entityManager 關掉,它會一直保留至確定 transaction 都被關掉為止,所以要確保EntityManager 能被 close 的話,要像下面這樣做才行 (至少在 Java6 時都必需是這樣):
EntityManagerFactory emf = ... ; EntityManager em = emf.createEntityManager(); try { EntityTransaction t = em.getTransaction(); try { t.begin(); // business logic to update the customer em.merge(cust); t.commit(); } finally { if (t.isActive()) t.rollback(); } } finally { em.close(); }
沒有留言:
張貼留言