更新数据库表时,Grails GORM锁定表

时间:2017-01-08 13:01:17

标签: hibernate grails gorm transactional

我正在迭代一个大型数据集并更新每一行。 数据被锁定,只要其循环和更改在完成所有操作之前都不会保存

我的代码:

在控制器中

stocks.each { stock ->

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

并且服务中的save方法是唯一使用@Transactional的方法:

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

1 个答案:

答案 0 :(得分:1)

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

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

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