关闭 entityManager 的最佳方式
Best way to close an 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();
}
}
我正在我的控制器中处理异常,但我想确保实体管理器已关闭。我不喜欢我正在捕获并重新抛出错误。我希望能找到更好的建议。
谢谢
最好的办法就是不用在意。如果您的 Entity Manager
是 容器管理的 (例如,如果您正在使用 ejb
或 spring
并且您没有强制执行特定的 bean/application 托管行为)你应该让容器处理事务的 opening/close 并且通常要担心你的持久性上下文。它更容易、更安全,并且在排除非常具体的情况下更好。 Entity Manager
的手动关闭应仅在 应用程序管理上下文 的情况下由您直接处理,以避免连接池耗尽或其他问题。
我有以下代码:
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();
}
}
我正在我的控制器中处理异常,但我想确保实体管理器已关闭。我不喜欢我正在捕获并重新抛出错误。我希望能找到更好的建议。
谢谢
最好的办法就是不用在意。如果您的 Entity Manager
是 容器管理的 (例如,如果您正在使用 ejb
或 spring
并且您没有强制执行特定的 bean/application 托管行为)你应该让容器处理事务的 opening/close 并且通常要担心你的持久性上下文。它更容易、更安全,并且在排除非常具体的情况下更好。 Entity Manager
的手动关闭应仅在 应用程序管理上下文 的情况下由您直接处理,以避免连接池耗尽或其他问题。