我通常像这样布局我的Java SE方法。我应该尝试捕获这样的简单读取的任何异常吗?我可以看到使用捕获的任何插入,但为此我没有看到需要。只是征求建议。
public List<PkgLineStateHistory> findAllStateHistory() {
EntityManager em = getEntityManager();
List<PkgLineStateHistory> list = null;
try {
return em.createNamedQuery("PkgLineStateHistory.findAll").getResultList();
} finally {
em.close();
}
}
答案 0 :(得分:1)
您需要让异常冒泡到您的交易边界之外,否则您的交易不会回滚(除非您明确处理您的交易,这比您需要的工作更多)。
另外,我不认为只是一个finally子句实际上捕获了异常。
FWIW,我见过的大多数webapp都让异常一直冒出来,并且有一些通用的错误处理机制让人想起一个合适的响应。如果要对它们做某事,只能捕获异常。
答案 1 :(得分:1)
对于Java SE应用程序(这是您的情况),关闭EM是一个很好的做法,因为您可能正在自己管理EntityManagerFactory。
在托管环境中,例如在提供EM的Java EE容器内部,您无需关闭它,因为容器正在管理它。听起来微不足道,但并不总是显而易见的; - )