【Java】因为框架缺陷导致Spring事务回滚BUG
因为框架缺陷
导致@Transactional(rollbackFor=Exception.class)无法执行,
事务无法回滚该怎么办?
如图,被我用try catch包起来了,执行int s=1/0之后发生异常,不执行deleteById,前面的数据删掉了,后面的数据没删,也没有回滚。
回答
最终把try catch 写在UI层就可以了
这个不是框架缺陷也不是bug啊@Transactional
事务回滚是依赖AOP实现的,当该方法有异常抛出才会回滚。
你在@Transactional(rollbackFor=Exception.class)
方法里把异常给try catch了,那aop怎么拦截的到抛出的异常,你要在catch里面再重新把异常抛出才能回滚。
try { int i = 1 / 0;
dao.deleteId(id);
} catch (Exception e) {
e.printStackTrace();
map.put("code", 1);
map.put("msg", "删除项目失败");
throw new Exception(e);
}
这样就可以回滚了
在catch代码块使用下面这行代码强制回滚即可
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
boolean success = false;try {
... // db transaction
success = true;
} finally {
if (success) {
// return successful results
} else {
// return failure
}
}
试试这样可以吗
以上是 【Java】因为框架缺陷导致Spring事务回滚BUG 的全部内容, 来源链接: utcz.com/a/89971.html