关闭entityManager的最佳方法

时间:2018-03-16 06:19:12

标签: java jpa entitymanager

我有以下代码:

    public Category findCategoryById(Long id) {
      EntityManager em = emf.createEntityManager();
      try {
          em.getTransaction().begin();
          Category category = categoryDAO.findCategoryById(em, id);
          em.getTransaction().commit();
          return category;
      } catch (Exception e) {
          throw e;
      } finally {
          em.close();
    }
  }

我正在处理控制器中的异常,但我想确保实体管理器已关闭。我不喜欢我抓住并重新抛出错误。我希望能找到更好的建议。

感谢

1 个答案:

答案 0 :(得分:2)

最好的方法是不必关心它。如果您的Entity Manager容器管理(例如,如果您使用的是ejbspring,并且您没有强制执行特定的bean /应用程序托管行为)您应该让容器处理事务的打开/关闭,并且通常会担心您的持久性上下文。它更容易,更安全,并且排除非常具体的情况,更好。只有在应用程序托管上下文的情况下,您才能直接处理Entity Manager的手动关闭,以避免连接池耗尽或其他问题。