Должна ли оптимистическая блокировка выявлять проблемы одновременного обновления?
Под одновременным обновлением я подразумеваю, что два разных пользователя пытаются обновить объект с одним и тем же номером версии. Например, если существует класс домена Person и Person с id = 1 и версией = 0, имеет name = Jack, и два разных пользователя пытаются обновить имя в версии 0, я бы ожидал, что только один из пользователей чтобы добиться успеха и изменить версию на 1. Я ожидал, что второй пользователь получит исключение Hibernate staleStateException или что-то подобное. Но этого не происходит.
Вот мой вариант использования:
Grails 3.1.5 grails generate-app person grails create-domain-class Person Edit Person.groovy to include String name grails generate-all person.Person gradle bootRun
Используйте два разных браузера для доступа к приложению, например Chrome и Firefox, чтобы убедиться, что два браузера находятся в разных сеансах. Создайте человека в одном из них, а затем откройте этого человека (версия 0) для редактирования в обоих браузерах. Оба браузера теперь должны редактировать версию 0 пользователя. Сохраните изменение имени в одном браузере, это сработает и изменит сохраненную версию объекта на 1, но второй браузер все еще редактирует версию 0. Теперь сохраните изменения во втором браузере, это также работает. Несмотря на то, что второй браузер только что сохранил изменения в уже устаревшем объекте (версия 0), исключение StaleObject или StaleStateException не генерируется. Это правильное поведение?