如何在java中处理异常

如何在java中处理异常,java,spring,jpa,Java,Spring,Jpa,我正在开发SpringMVC应用程序。我的问题是,当我通过控制器类调用dao中的delete方法时,异常在dao中不被处理。但如果我在控制器中使用try-catch-around调用方法,它将捕获错误 控制器类方法: customerDao.delete(id); 旋转类: public void delete(long id) { try{ em.remove(em.find(id)); } catch(Exception e) { //not come to here } } 如果我使用

我正在开发SpringMVC应用程序。我的问题是,当我通过控制器类调用dao中的delete方法时,异常在dao中不被处理。但如果我在控制器中使用try-catch-around调用方法,它将捕获错误

控制器类方法:

customerDao.delete(id);
旋转类:

public void delete(long id)
{
try{
em.remove(em.find(id));
}
catch(Exception e)
{
//not come to here
}
}
如果我使用try-catch-around“
customerDao.delete(id);
”处理错误。 为什么我不能在dao类中处理异常。
注意:抛出的异常是未发现的子记录RollbackException。remove不会立即执行任何操作-事务提交会强制JPA将其语句刷新到数据库,此时您将获得异常。如果要在DAO中处理异常,请添加em.flush();在try块中。这将强制该语句进入数据库,并立即抛出任何异常

我们可以看看你的
delete()
函数吗?Java中有一种异常(
RuntimeException
),它不需要在
try-catch
块中。它将抛出,直到有一个
捕捉
。我认为,如果您尝试在
delete
函数中处理异常,它会起作用。抛出的确切异常是什么?您确定它是从
delete()
-方法内部抛出的,而不是在提交时抛出的吗?请发布完整的stacktrace,它将回答这些问题。违反完整性约束-发现子记录意外回滚异常我现在没有确切的代码。这是发生在工作场所的问题。正如我所说,异常是在控制器类中捕获的,而不是在dao类中捕获的。为什么呢?