NutzCN Logo
问答 多数据源下,事务不会回滚,应该怎么解决呢?
发布于 2551天前 作者 qq_5245a4a9 2675 次浏览 复制 上一个帖子 下一个帖子
标签:

同一个数据源,跨库的名字写死去操作,也不能回滚

10 回复

比如A库用的dao,B库用的daoA。
在同一个事务中执行,dao和daoA都有插入操作,出现异常的时候,事务不会回滚,应该怎么解决呢?

来点代码看看,commit的时候报错才不能回滚的

try {
        Trans.exec(new Atom() {
            public void run() {
                if (pojo instanceof DataFieldPrvPojo) {
                    TableName.run(user.getUnitid(), new Runnable() {
                        public void run() {
                            boolean a = daoB.exists(DataFieldPrvPojo.class);
                            if (!a) {
                                daoB.create(DataFieldPrvPojo.class, false);
                            }
                            daoB.insert(pojo);
                        }
                    });
                } 
                dao.insert(pojo);
            }
        });
    } catch (Exception e) {
        return false;
    }

有建表语句的事务,数据库会强制commit的

那这种问题怎么解决呢?
我把建表的单独拿出来写,失败后,我去删除前面提交成功的?

你试试吧, 没有其他干预的情况下, dao.insert(pojo)抛出异常, daoB.insert会回滚的

dao.insert和daoB.insert在一个事务下,是会回滚的。
如你所说,有建表语句的事务,就没法回滚了。

那像我这样,包含建表语句的事务。
把建表语句单独拿出来写,如果建表语句异常,自己写代码去删除前面提交成功的?

是的,只能这样了

好的,谢兽总!

添加回复
请先登陆
回到顶部