【发布时间】:2018-03-16 06:19:11
【问题描述】:
我有以下代码:
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();
}
}
我正在处理我的控制器中的异常,但我想确保实体管理器已关闭。我不喜欢我捕捉并重新抛出错误。我希望能找到更好的建议。
谢谢
【问题讨论】:
-
只需取下锁扣即可。 finally 子句在没有它的情况下运行。
-
如果您关闭/打开 entityManager,您可能无法使用 EntityManager 提供的缓存和其他机制。但是,您可以只删除代码中的 catch 部分,并在其他地方抛出异常时放置某种异常处理程序。
-
如果我只是去掉catch,异常还会传播到调用类吗?
finally块的存在? -
也许你可以试试Java8 Try-with-resource
-
@vegaasen:你是在建议我让
entityManager保持打开状态吗?我应该为每个会话保留一个吗?
标签: java jpa entitymanager