@Clear(Tx.class) public String forceToComplete() { //此处有一个循环,目的是循环中的更新操作互相不影响 updateStockInOrderToDelete(); } @Before(Tx.class) private void updateStockInOrderToDelete() { Db.update("insert into temp_test values ('test')"); int s = 1/0; }
我的service整个业务层都在Config中注入了事务,所以第一个方法中清除Tx.class,我想问下为什么update中重新租入Tx.class, 不生效。出异常时事务没有回滚。
必须要如下写法才会回滚
Db.tx(() -> { updateStockInOrderToDelete(); return true; });
项目:JFinal
如果不使用上面的方式,触发拦截器还可以使用 Aop.get(...)
controller 层的 AOP 是自动触发的,无需上述的方式