为什么以下代码事务不会生效?
@Transactional
public String insert() {
try {
//新增一条数据
jdbcTemplate.update("insert into userinfo values (? , ?)" , "5" , "5");
//显示抛出异常
int a = 1/0;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
为什么以下代码事务会生效
@Transactional
public String insert() {
try {
//新增一条数据
jdbcTemplate.update("insert into userinfo values (? , ?)" , "5" , "5");
//显示抛出异常
int a = 1/0;
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return "";
}
原因是被try-catch中的异常会被catch捕获到 ,而被catch捕获到异常之后,事务就捕获不到异常了,所以会出现问题,
如何解决? 就是在catch 中再显式抛出一个异常 (但是不建议使用,而是应该在方法体后面抛出异常 ,在控制层再做异常处理)
本文探讨了在Java中使用@Transactional注解进行事务管理时,如何正确处理异常以确保事务回滚。通过对比两种不同的异常处理方式,解释了为何在try-catch块中未显式调用事务回滚会导致事务无法正常结束,并提供了正确的解决方案。

1688

被折叠的 条评论
为什么被折叠?



