Java修道之路:JFinal一坑,事务不回滚问题

其实就是被坑了一下,哪个猿不是从坑里爬出来的呢?有个朋友说过,“有什么坑的,就记下来,下次不要被坑了”,可是,我觉得真是“一朝若被坑,永生真●难忘”,根本不用记录,呵呵。

但,这篇文章不是想描述我如何被坑的,而是为了记录一个处理问题的过程!

使用公司自己的一个eclipse插件做开发,该插件集成了JFinal框架,也不知道是哪个版本的JFinal,不过可以肯定的是2.0以前的。

写了一段业务,删除A表指定记录 -> 插入A表一条记录 -> 批量插入B表n条记录 -> 批量插入C表n条记录(记录从D表中查出),下面是伪代码:

Db.tx(new IAtom() {

	@Override
	public boolean run() throws SQLException {

		try {
			Db.update("delete from A where id = ?", id);
			Db.update("insert into A values(null,?,?)", new Object[]{param1, param2});

			// 准备参数
			Object[][] objss1 = new Object[row][3];
			for (int i = 0; i < row; i ++) {
				objss[i][0] = param3;
				objss[i][1] = param4;
				objss[i][2] = param5;
			}
			Db.batch("insert into B values(null,?,?,?)", objss1, 1000);

			// 准备参数
			Object[][] objss2 = new Object[row][1];
			for (int i = 0; i < row; i ++) {
				objss[i][0] = param6;
			}
			Db.update("insert into C select * from D where id = ?", objss2);

		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
});

继续阅读