У меня есть приложение Grails, в которое люди входят через Spring Security.Затем их пользовательский домен загружается в сеанс на время входа в систему.
Я получаю исключение StaleObjectStateException, когда другой пользователь выполняет действие, обновляющее счетчик для объекта пользователя в базе данных user.save(flush:true)
, которая в данный момент включена.другой сеанс пользователя, вошедшего в систему
Например, у меня есть объект "Пользователь A" в сеансе для пользователя, вошедшего в систему А. Затем, когда пользователь B вошел в систему, он выполняет действие для обновления объекта пользователя A, новерсия не синхронизирована.
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.example.User#2]
at $Proxy12.merge(Unknown Source)
Я попытался объединить, но не повезло.
Я думаю о том, чтобы полностью удалить свойство "version", так как обновлений так много.в пользовательском домене, поскольку в систему войдут сотни пользователей. Но я не знаю, как это повлияет на согласованность данных с течением времени.
Поменяет ли user.save(flush:true)
на User.executeUpdate(Update viewCount where ...)
решениепроблема и принести больше проблем с кэшированием?
Или я могу выбрать определенные свойства, которые могут игнорировать «версию» при их обновлении.Я не очень понимаю, что происходит с этим примером.http://grails.1312388.n4.nabble.com/GORM-setting-access-field-td1592837.html
Так, как я могу решить это?