通常在ssh架构中,我们是在Spring中管理事务的. Spring容器可以对事务进行自动提交和回滚.但是Spring对事务进行回滚的时候只能是对于抛出 RuntimeException 或其子类的异常。
在测试的时候发现如果 getHibernateTemplate().saveOrUpdate 出错时抛出的异常是 java.sql.BatchUpdateException(不是 RuntimeException 的子类),设置断点的时候发现程序也没有执行到 catch 里面就停了
有两个疑问:
1. 这样岂不是Spring不能自动回滚事务
2. 为什么在Dao层写的 save 方法中 saveOrUpdate 出现异常的时候程序不能执行到 catch 里面
public <T> void save(T entity) throws Exception {
try {
this.getHibernateTemplate().saveOrUpdate(entity);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
在测试的时候发现如果 getHibernateTemplate().saveOrUpdate 出错时抛出的异常是 java.sql.BatchUpdateException(不是 RuntimeException 的子类),设置断点的时候发现程序也没有执行到 catch 里面就停了
有两个疑问:
1. 这样岂不是Spring不能自动回滚事务
2. 为什么在Dao层写的 save 方法中 saveOrUpdate 出现异常的时候程序不能执行到 catch 里面
public <T> void save(T entity) throws Exception {
try {
this.getHibernateTemplate().saveOrUpdate(entity);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货