0
大きなデータセットを繰り返し処理して各行を更新しています。 データは、そのループの限り、ロックされ、変更はそのすべてになるまで保存されませんマイコードGrails GORMはDBテーブルの更新時にテーブルをロックします
行わ:
コントローラstocks.each { stock ->
def s = stockService.updateData(stock)
stockService.save s
}
で
とサービスで保存する方法があるだけで
@Transactional
private void save(Stock stock) {
stock.save(failOnError: true, flush: true)
}
ループで実行する場合。私は取得します: 原因:org.springframework.orm.hibernate5.HibernateSystemException:2つの開いているセッションとコレクションを関連付ける試みが正しくありません。コレクション:[xxx.Stock.estimations#718];ネストされた例外はorg.hibernate.HibernateExceptionです:2つの開いているセッションにコレクションを関連付ける試みが正しくありません。 – Torsten
[OK]のように、在庫は「見積もり」と「多対多」の関係にあり、見積もりは他のセッションにバインドされているようです。 新しいトランザクションにすべての見積もりを添付することができます。または、 "save()"の代わりに "merge()"を呼び出すこともできます。多分それが助けになるかもしれない。 – gregorr