2014年11月14日 星期五

Close Entity Manager

關於 close jpa 的 EntityManager:

http://javanotepad.blogspot.tw/2007/06/how-to-close-jpa-entitymanger-in-web.html
裡面說到了非常重要的觀念,就是當 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();  }

沒有留言: