Grails 休眠获取旧数据

问题描述 投票:0回答:1
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 asynchronus 还是什么??

spring hibernate grails
1个回答
0
投票

在 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 方法是同步执行的,每条批处理语句按顺序添加到批处理中。希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.