事务回滚是这样用的吗?为什么不行呢?

Ret ret = fail() ;
boolean isSuccess = Db.tx(()->{
	BigDecimal totalAmount = BigDecimal.ZERO ; //订单的总金额
	boolean allSuccess = true ;
	for (int i = 0; i < proIds.length; i++) {
		String productId = proIds[i] ;
				
		Ret rets = this.checkOrderIsValid(productId);
		if (rets.isFail()) {
			ret.set("err" , rets.get("err"));
			allSuccess = false ;
			break ;
		}
				
				
		//其他逻辑...
				
	}
	ret.set("totalAmount" , totalAmount);
	return allSuccess ;
});
if (isSuccess == false) {
	return ret ;
}
//其他的逻辑...



最后总是会有这样的提示信息:
com.jfinal.plugin.activerecord.NestedTransactionHelpException: Notice the outer transaction that the nested transaction return false

如果isSuccess == false,也无法执行到最后的判断语句:
if (isSuccess == false) {
	return ret ;
}

到底怎么用才对呀


评论区

JFinal

2019-08-21 16:41

你开启了嵌套事务,很可能是外层你还用了 @Before(Tx.class)

在控制台看一下 jfinal action report 中输出的拦截器信息,找一找 Tx.class 是不是存在,用 @Clear(Tx.class) 删之