我应该尝试捕获任何EnityManager查询异常吗?

时间:2011-02-02 17:17:05

标签: java jpa exception-handling persistence

我通常像这样布局我的Java SE方法。我应该尝试捕获这样的简单读取的任何异常吗?我可以看到使用捕获的任何插入,但为此我没有看到需要。只是征求建议。

 public List<PkgLineStateHistory> findAllStateHistory() {

    EntityManager em = getEntityManager();
    List<PkgLineStateHistory> list = null;
    try {
        return em.createNamedQuery("PkgLineStateHistory.findAll").getResultList();          
    } finally {
        em.close();
    }
}

2 个答案:

答案 0 :(得分:1)

您需要让异常冒泡到您的交易边界之外,否则您的交易不会回滚(除非您明确处理您的交易,这比您需要的工作更多)。

另外,我不认为只是一个finally子句实际上捕获了异常。

FWIW,我见过的大多数webapp都让异常一直冒出来,并且有一些通用的错误处理机制让人想起一个合适的响应。如果要对它们做某事,只能捕获异常。

答案 1 :(得分:1)

对于Java SE应用程序(这是您的情况),关闭EM是一个很好的做法,因为您可能正在自己管理EntityManagerFactory。

在托管环境中,例如在提供EM的Java EE容器内部,您无需关闭它,因为容器正在管理它。听起来微不足道,但并不总是显而易见的; - )