首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
使用Db.tx方法时, 事务没有回滚
星矢
2019-11-18 11:12
当执行到第二句 Db.update方法时, 抛出了 java.sql.SQLException的错误, 第一句sql的更新仍然执行了。
项目:
JFinal
评论区
lyh061619
2019-11-18 11:27
执行是执行了,那你检查下数据是否已经被修改
回复
lyh061619
2019-11-18 11:28
另外看下你数据库是否是innodb引擎
回复
星矢
2019-11-18 11:49
数据发生了修改, 我第二条是建表语句, 执行了第一条更新数据后, 第二条建表的报错后, 第一条更新数据的居然执行成功了。 数据库引擎 innodb
回复
lyh061619
2019-11-18 12:16
@星矢
事物设计没有问题,这个没毛病,有毛病的源头要搞清楚事物的真正用法和使用场景是为了没有,其次单批调用第一条成功,下一条发生异常事物回滚跟你上条成功没有大多关连问题。再再假如你当前那条发生异常事物回滚了,数据还能修改成功也毛病不大,如果是MySQL请检查数据引擎是否是InnoDB,其他数据库。
回复
JFinal
2019-11-19 00:53
检查一下 projectTable.update() 是不是跨数据源了
jfinal 不支持多数据源事务,跨数据源事务是分布式事务的范畴
回复
星矢
2019-11-19 10:15
@JFinal
同一个数据源内发起的请求。 第一个用的是 model中的update, 第二个用的是Db.update 其中 Db.update执行的是 创建数据库表的操作。 当创建失败时, 系统刨出的sql异常。 然后我尝试用try cache包了一下这个Db.update,并在刨出异常时return false, 第二个刨出sql异常时第一个依然执行成功
回复
JFinal
2019-11-19 11:51
@星矢
这个就奇怪了,去掉 try catch 试试看
回复
星矢
2019-11-19 14:55
@JFinal
经过多次测试, 发现,当create table的时候, 抛错时事务回滚, 当 alter table的时候, 事务就不行了。 不晓得是怎么回事儿..
回复
JFinal
2019-11-19 16:18
@星矢
这就对了, alert table、create table 这类改变数据表结构的 sql 是无法回滚的,能回滚的是改变数据本身,而不是数据结构
这个是由数据库决定的,jfinal 无法干预
回复
星矢
2019-11-19 17:17
原来如此, 谢谢波总授道解惑
回复
发送
我要反馈
热门反馈
扫码入社