Я предполагаю, что вы используете одну из СУБД на базе MVCC .
Если уровень изоляции транзакции не выше READ COMMITTED, вы можете уменьшить вероятность конфликта, выполнив запрос для проверки существования городов с тем же name
, прежде чем вставлять новый.
Обратите внимание, что saveOrUpdate()
здесь не может помочь, поскольку name
не является первичным ключом. Также обратите внимание, что вы не можете предотвратить конфликт вообще (по крайней мере, без использования некоторых специфических для СУБД функций), поскольку в основном это пример аномалии записи , который не может быть предотвращен в СУБД на основе MVCC.
Кроме того, если атомарность импорта XML-файла не критична, вы можете разбить длинную транзакцию на несколько более коротких и просто повторить их в случае нарушения ограничения.