我正在迭代一个大型数据集并更新每一行。 数据被锁定,只要其循环和更改在完成所有操作之前都不会保存
我的代码:
在控制器中
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)
}
答案 0 :(得分:1)
如果您不希望数据集一直被锁定,您可以为每次保存创建一个事务:
private void save(Stock stock) {
Stock.withNewTransaction {
stock.attach()
stock.save()
}
}
缺点是,错误无法回滚所有已更改的数据集。