首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
事务回滚不了,求帮忙看一下
ze
2017-08-28 11:29
之前在Tx.class 打断点看是走到 这里的
但是数据没有回滚
项目:
JFinal
评论区
JFinal
2017-08-28 11:33
首先通过设置断点,单步调试,看代码有没有执行 conn.rollback() 这个方法,如果执行了,只需要确保以下几件事就可以了:
1:mysql 是不是在用 InnoDB 引擎,其它引擎不支持事务
2:事务级别是否足够高,如果是 2 的话,建议调为 4 看一下:arp.setTransactionLevel(4)
3:是不是不细心,上次提交过的已成定局的数据,误认为是本次事务没有回滚
回复
ze
2017-08-28 13:05
@JFinal
额,我确定的是您说的1和3都没问题,但是事务级别的话我不是很清楚怎么看是不是2或者多少?
回复
ze
2017-08-28 13:08
@JFinal
是在config链接c3p0连接arp的时候设置是吗?
回复
JFinal
2017-08-28 13:23
@ze
你 new 出来的 ActiveRecordPlugin 对象就是 arp 了,new 出来以后,直接配置一下
回复
ze
2017-08-28 13:27
@JFinal
我加上了“arp.setTransactionLevel(4)“,还是不行,我有一个疑问的是:这种多表插入的操作,像现在我打断点跑,执行到menu表的save(),和resource表的save()方法,然后去刷新数据库,数据添加进去了,然后往下执行,跑到报错的地方,再然后跳到“Source not found.”,再按3次F6,跳进MethodProxy.class的catch (InvocationTargetException arg3),后面到Invocation.class的catch (RuntimeException e),最后到这来:catch (Throwable t) {
if (conn != null) try {conn.rollback();} catch (Exception e1) {LogKit.error(e1.getMessage(), e1);}
回复
ze
2017-08-28 13:28
@JFinal
AutoTableBindPlugin arp =
new AutoTableBindPlugin(PropKit.get(ConstantInit.DB_DATASOURCE_MAIN), yimei);
arp.autoScan(false);
String yimeiPackage = PropKit.get(ConstantInit.CONFIG_SCAN_YIMEI_PACKAGE);
arp.addScanPackages(yimeiPackage);
me.add(arp);
arp.setTransactionLevel(4);这个加上了也不行
回复
JFinal
2017-08-28 13:55
@ze
你确定 conn.rollback() 这行代码被执行了?
回复
ze
2017-08-28 14:08
@JFinal
是的,我跑了几遍断点都走过了这个catch (Throwable t) {
if (conn != null) try {conn.rollback();} catch (Exception e1) {LogKit.error(e1.getMessage(), e1);}
throw t instanceof RuntimeException ? (RuntimeException)t : new ActiveRecordException(t);
}然后都往下走finally了
回复
JFinal
2017-08-28 14:10
@ze
这个问题很诡异,建议多单步调试找原因,在我们这里都是很好用的,jfinal 的这个功能用了五六年了
回复
ze
2017-08-28 14:14
@JFinal
好的,我找我主管来看下,谢谢了
回复
JFinal
2017-08-28 14:16
@ze
记得搞定后回来分享一下,这个问题相当罕见
回复
ze
2017-08-28 14:18
@JFinal
好
回复
发送
我要反馈
热门反馈
扫码入社
1:mysql 是不是在用 InnoDB 引擎,其它引擎不支持事务
2:事务级别是否足够高,如果是 2 的话,建议调为 4 看一下:arp.setTransactionLevel(4)
3:是不是不细心,上次提交过的已成定局的数据,误认为是本次事务没有回滚