更新数据库时 Grails GORM 锁定 table table

Grails GORM locks table when updating a DB table

我正在遍历大型数据集并更新每一行。 只要数据循环就锁定数据,直到全部完成才保存更改

我的代码:

在控制器中

stocks.each { stock ->

        def s = stockService.updateData(stock)
        stockService.save s
    }

并且服务中的保存方法是唯一带有@Transactional:

@Transactional
private void save(Stock stock) {
    stock.save(failOnError: true, flush: true)
}

如果您不希望数据集一直处于锁定状态,您可以为每次保存创建一个事务:

private void save(Stock stock) {
    Stock.withNewTransaction {
        stock.attach()
        stock.save()
    }
}

缺点是,无法回滚所有已更改的数据集。