Вы можете сделать либо.flush () технически не является дорогостоящей операцией, так как работа, которую она выполняет при записи в базу данных, больше не должна выполняться коммитом, поэтому нет дополнительного доступа к базе данных и она не «обновляет всю базу данных».У flush () есть некоторые накладные расходы, хотя изменения будут вычислены дважды, один раз для flush и один раз для commit, против один раз с commit.В зависимости от вашей политики изменения и количества управляемых объектов, это имеет свою стоимость.Flush также должен перевести управляемые объекты в отслеживаемое управляемое состояние, которое также имеет некоторую стоимость, но, как правило, незначительное по сравнению со стоимостью доступа к базе данных.
Обратите внимание, что во время фиксации могут возникнуть другие ошибки, чем ошибка блокировкитак что даже если вы используете сброс для обнаружения ошибки блокировки, вам все равно нужен код в вашей войне для обработки других причин сбоя, поэтому лучшим решением может быть не использование сброса и просто обработка ошибок при обычной транзакции.Если вы хотите сделать что-то особенное для ошибки блокировки, вы должны быть в состоянии найти исключение в причине по цепочке, но будьте осторожны, просто повторяя операцию, вы блокируете по причине, поэтому, вероятно, следует сообщить об ошибке впользователь и попросите его повторить операцию.