Java 我是否应该尝试捕获EnityManager查询异常?

Java 我是否应该尝试捕获EnityManager查询异常?,java,jpa,exception-handling,persistence,Java,Jpa,Exception Handling,Persistence,我通常这样布局我的JavaSE方法。我是否应该尝试捕捉像这样的简单读取的任何异常?我可以看到任何插入使用捕捉,但对于这一点,我不认为有必要。只是征求意见 public List<PkgLineStateHistory> findAllStateHistory() { EntityManager em = getEntityManager(); List<PkgLineStateHistory> list = null; try {

我通常这样布局我的JavaSE方法。我是否应该尝试捕捉像这样的简单读取的任何异常?我可以看到任何插入使用捕捉,但对于这一点,我不认为有必要。只是征求意见

 public List<PkgLineStateHistory> findAllStateHistory() {

    EntityManager em = getEntityManager();
    List<PkgLineStateHistory> list = null;
    try {
        return em.createNamedQuery("PkgLineStateHistory.findAll").getResultList();          
    } finally {
        em.close();
    }
}
公共列表findAllStateHistory(){
EntityManager em=getEntityManager();
List=null;
试一试{
返回em.createNamedQuery(“PkgLineStateHistory.findAll”).getResultList();
}最后{
em.close();
}
}

您需要让异常冒泡到您的事务边界之外,否则您的事务不会回滚(除非您显式地处理事务,这比您需要做的工作要多)

此外,我不认为只有finally子句才真正抓住了例外

FWIW,我见过的大多数Web应用程序都会让异常一路冒泡,并且有一些通用的错误处理机制,可以产生适当的响应。仅当您要对异常执行某些操作时才捕获异常

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


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

在他的示例中,异常正在传播。我认为他的观点是:他是否应该将他的陈述包装在一个try块中,以便在finally中“结束”?