Java 我是否应该尝试捕获EnityManager查询异常?
我通常这样布局我的JavaSE方法。我是否应该尝试捕捉像这样的简单读取的任何异常?我可以看到任何插入使用捕捉,但对于这一点,我不认为有必要。只是征求意见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 {
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中“结束”?