jfinal事物为啥这么用不生效呢,只要执行update数据就进库了,数据库用的是oracle

@JN@FI@3ASG6XN.png" style="background:url(http://www.jfinal.com/assets/ueditor/lang/zh-cn/images/localimage.png) no-repeat center center;border:1px solid #ddd"/>
求助下这么使用为啥Db.tx的事物是无效的呢,只要执行Db.update数据就进库了~ 

jfinal事物为啥这么用不生效呢,只要执行update数据就进库了,数据库用的是oracle


Db.tx(new IAtom() {
					@Override
					public boolean run() throws SQLException {
						try {
							for(SqlRunItem sqlRunItem:sqlRunItems){
								SqlRunScript sqlRunScript = SqlConverUtil.build(sqlRunItem.getStr("sqlscript"), parMap);
								Db.use(sqlRunItem.getStr("datasource")).update(sqlRunScript.getSqlscript(), sqlRunScript.getPara());
							}
						} catch (Exception e) {
							return false;
						}
						return true;
					}
				});


评论区

JFinal

2016-09-06 16:04

Db.tx 默认是对主数据源应用事务,而你的代码在 run 方法内用的 Db.use(...) 切换到了另一个数据源,所以没有生效,解决办法是,在 Db.tx 时指令数据源与内部的 Db.use(...) 数据源一致,Db.tx 方法可以指定数据源

GeminiLiu

2016-09-06 18:21

@JFinal 感谢波总~

年轻人

2017-10-19 21:06

@JFinal 请问Db.tx 方法如何指定数据源?不是只有 tx(int transactionLevel, IAtom atom) 和 tx(IAtom atom) 吗?

JFinal

2017-10-23 10:30

@年轻人 Db.use(...).tx(...) 这样就可以先指定数据源,再 tx 做事务

年轻人

2017-10-26 21:08

@JFinal 噢噢,这样啊,感谢波总

热门反馈

扫码入社