使用Db类的Tx方法可以实现事务回滚,但是声明式事务无法回滚

场景1:在业务层的指定方法上添加@Before(Tx.class)事务拦截器,并且在controller里通过Enhancer.enhance(业务层类.class)获取增强后的业务层对象进行业务方法调用,结果无法在执行sql语句报错的情况下回滚。

场景2:在业务层的指定方法上使用Db.Tx(new IAtom(){...})进行事务控制,在controller里通过实例化业务层对象然后调用业务方法,结果在执行sql语句报错的情况下顺利回滚。

求解这是什么原因?


评论区

HingLo

2018-05-11 16:24

我也是在Service中的方法上加上了@Before(Tx.class)事物就能成功回滚

hann

2018-05-11 16:36

@HingLo 我是@Before(Tx.class)无法回滚……

hann

2018-05-11 16:42

再补充一下,使用Inject方式的事务拦截也是回滚失败。貌似是Tx拦截器的都无法回滚,除了Db.Tx()方法。

JFinal

2018-05-11 18:37

@hann @Before(Tx.class) 无法跨多数据源回滚,注意一下是不是这个问题

hann

2018-05-12 15:13

没有使用多数据源

热门反馈

扫码入社