【Java】因为框架缺陷导致Spring事务回滚BUG

因为框架缺陷
导致@Transactional(rollbackFor=Exception.class)无法执行,
事务无法回滚该怎么办?

【Java】因为框架缺陷导致Spring事务回滚BUG

如图,被我用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

回到顶部