Grails hibernate获取旧数据

oxiaedzo  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(139)
void doSomething(batchSize, someList){
    def db = new Sql(datasource)
    db.withTransaction{
        db.withBatch(batchSize){ stmt -> 
            someList.each {
                String sqlStr = ""
                //  do something and prepare sqlStr
                stmt.addBatch(sqlStr)
            }
        }
    }
}

我正在调用这个函数,当再次查询时,我得到了旧的数据,即使数据库已经更新。可能是什么问题??是withBatch异步还是什么??

vpfxa7rd

vpfxa7rd1#

在PreparedStatement上调用executeBatch方法之前,批处理不会执行。请确保在该闭包的末尾调用executeBatch。尝试以下操作:

void doSomething(batchSize, someList) {
    def db = new Sql(datasource)
    db.withTransaction {
        db.withBatch(batchSize) { stmt ->
            someList.each {
                String sqlStr = ""
                //  do something and prepare sqlStr
                stmt.addBatch(sqlStr)
            }
            stmt.executeBatch() // Execute the batch after adding all statements
        }
    }
}

在此实现中,在添加所有批处理语句后,在PreparedStatement对象stmt上调用executeBatch()。这将作为单个操作执行所有批处理SQL语句。
关于你关于withBatch方法的问题,默认情况下它不是异步的,withBatch方法是同步执行的,每个批处理语句都是按顺序添加到批处理中的,希望这对你有帮助

相关问题