我有以下代码:
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();
}
}
我正在处理控制器中的异常,但我想确保实体管理器已关闭。我不喜欢我抓住并重新抛出错误。我希望能找到更好的建议。
感谢
答案 0 :(得分:2)
最好的方法是不必关心它。如果您的Entity Manager
是容器管理(例如,如果您使用的是ejb
或spring
,并且您没有强制执行特定的bean /应用程序托管行为)您应该让容器处理事务的打开/关闭,并且通常会担心您的持久性上下文。它更容易,更安全,并且排除非常具体的情况,更好。只有在应用程序托管上下文的情况下,您才能直接处理Entity Manager
的手动关闭,以避免连接池耗尽或其他问题。