NutzCN Logo
问答 用事务提交数据库处理时,取数据的条目不对
发布于 2374天前 作者 qq_df433f5d 1810 次浏览 复制 上一个帖子 下一个帖子
标签:

我在一个事务处理里,往一张数据表里循环插入了一些数据,在插入的代码后面紧接着一个检索数据的操作,但是获取的数据条目完全不对。直接执行log里打印出的SQL,数据条目是对的。我看log的话,发现获取数据的SQL后面还有插入数据的SQL,感觉不是顺序执行的一样。这是什么原因?代码类似如下:

Trans.exec(new Atom() {
            public void run() {
                for (......) {
                    xxxService.insertXxx(.......);
                }

                List<xxx> xxxList = xxxService.query(
                    Cnd.NEW().where("dataId", "=", xxxId));
   		........
		........
            }
        });
11 回复

是不是加了异步注解@Async ?

没有,注释只写了@At和@Ok

这个好奇怪啊,数据总是取不全。为什么啊?

获取数据的SQL后面还有插入数据的SQL

有定时任务在运行?本地能重现?

对的,定时任务运行,本地可以重现。

不是定时任务,脑袋晕了。

上面描述的操作不是在定时任务中运行的,但是有其他的定时任务在运行。

刚去仔细研究了下log,发现确实是insert的动作都还没做完呢,后面的查询就已经做了。哪里有控制是异步同步的啊,我就是用的dao的insert啊。兽总救我啊,搞了一个礼拜了。。。

我拆成两个方法了,后面取数据的放到另一个方法里,然后好像就没问题了。。。

全局搜索一下@Async, 另外,xxxService.insertXxx方法的头尾,各打印一下日志

肯定有别的线程在执行插入,你先看看,你都起了哪些线程

来自美丽的 NutzCN

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