Я выполняю итерацию по большому набору данных и обновляю каждую строку. Данные заблокированы до тех пор, как его петлями и изменения не сохраняются только его все сделаноТаблица ограничений Grails GOLD при обновлении таблицы DB
Мой код:
В контроллере
stocks.each { stock ->
def s = stockService.updateData(stock)
stockService.save s
}
и метод сохранения в обслуживании является единственным на с @Transactional:
@Transactional
private void save(Stock stock) {
stock.save(failOnError: true, flush: true)
}
При работе в петле. Я получаю: Вызвано: org.springframework.orm.hibernate5.HibernateSystemException: Незаконная попытка связать коллекцию с двумя открытыми сеансами. Коллекция: [xxx.Stock.estimations # 718]; Вложенное исключение - org.hibernate.HibernateException: Незаконная попытка связать коллекцию с двумя открытыми сеансами. – Torsten
Хорошо, похоже, что Stock имеет отношение «ко многим» к «оценкам» и что оценки связаны с другим сеансом. Вы можете приложить все оценки к новой транзакции. Или вы можете называть «merge()» вместо «save()». Может быть, это может помочь. – gregorr