У меня такой код:
def myObject = MyDomainClass.get(myId)
myObject.refresh()
myObject.myProperty = myValue
myObject.save(flush:true, failOnError:true)
Несмотря на получение и обновление, я иногда получаю исключение org.hibernate.StaleObjectStateException: строка была обновлена или удалена другой транзакцией (или отображение несохраненных значений было неправильным) при выполнении сохранения.
Это происходит, когда я начинаю выполнять этот метод одновременно в нескольких сеансах. Но тогда транзакция 1 определенно завершена, этот код снова выполняется для транзакции 2 и все еще не выполняется! (Я использую службу транзакций для повторного выполнения транзакций, когда они терпят неудачу из-за оптимистичной блокировки, см. здесь).
Как такое может быть, если я получил "свежую" версию из БД?
MyDomainClass
каскадные отношения, такие какhasMany
илиbelongsTo
? Это могут быть связанные объекты, которые обновляются и сохраняются в каскаде. К какому классу относится StaleObjectStateException? - person Victor Sergienko   schedule 08.12.2010