jfinal 事务回滚不了的问题

天王盖地虎626 发布于 2015/05/21 06:07
阅读 2K+
收藏 0

我以前用的jfinal1.1版本,如在控制器中用下面这样的写法

Connection conn = null;

conn = DbKit.getDataSource().getConnection();
            DbKit.setThreadLocalConnection(conn);
conn.setAutoCommit(false);//关键就是把自动提交变成false

这段代码在jfinal1.1下是可以实现回滚的,但是把程序升级到jfnal1.8后,上面的写法报错,于是没办法,我在jfinal1.8中采用注解TX.class来实现事务回滚,但是,达不到我要的效果,即使程序异常后,跳进TX.class中的conn.rollback()后,发现数据依然被删除或修改或增加,总之,没有回滚。

查了文档,说要让mysql的类型改为InnoDB,我查了下,数据库也改成这样了,

 

还有,我的数据库连接方式采用druid连接池来实现的。

请问下,你们在jfinal1.8下,如何实现事务回滚的呀,很急呀。

说明数据库肯定是InnoDB

加载中
0
蓝水晶飞机
蓝水晶飞机
conn.setAutoCommit(false);这个是必须的。
0
iehyou
iehyou
应该数据库还不是InnoDB类型了  查下表的类型。
0
天王盖地虎626
天王盖地虎626

引用来自“iehyou”的评论

应该数据库还不是InnoDB类型了  查下表的类型。

我查了下,是InnoDB的呀

0
iehyou
iehyou

引用来自“iehyou”的评论

应该数据库还不是InnoDB类型了  查下表的类型。

引用来自“天王盖地虎626”的评论

我查了下,是InnoDB的呀

我的意思是 你改成InnoDB表已经建立了, 之后将mysql改为InnoDB 是无效的, 表删除重建下吧。
0
上下左右阿门
异常要抛出来 才会回滚
0
houyu
houyu

conn.setAutoCommit(false);

还要看mysql版本.

0
约黄昏
建议重新安装一个数据库,重新导入表结构及数据,看是否能正常,如果排除,再换成C3P0数据库,一个个点排除吧。
0
JFinal
JFinal
除了数据库引擎以外,事务是否正确回滚还代码有关,不同的代码形式需要的事务级别有所不同,简单办法是先提升事务级别, arp.setTrnasactionLevel(4),事务级别所发挥的作用可以查阅相关文档
0
追随
追随
我也遇到一样的问题。update和save的数据没有回滚,我是用Tx拦截器,使用2或4的事务级别都不行。我看到代码已经走过rollback那句,不知道问题出在哪儿。
JFinal
JFinal
回复 @yy670010378 : 老版本的 batch 方法中已经有提交操作,所以不受外部事务控制,jfinal 2.0 改进了这里,所以值得换新版本
yy670010378
yy670010378
回复 @JFinal : 你好 ,请问下多数据时事物回滚有上面特殊设置?
JFinal
JFinal
回复 @追随 : 新版本的很多好处,你是不了解的,换上后慢慢就知道了
追随
追随
回复 @JFinal : 我就粗看了一下,当时没发现换的必要。看来要换了。
JFinal
JFinal
回复 @追随 : 解决办法极度简单,换上 jfinal 2.0 可立即搞定,你没关注 jfinal 新版本特性啊?
下一页
返回顶部
顶部