Господа/дамы,
У меня проблема с параллельными обновлениями одного и того же объекта.
Процесс 1 получает коллекцию объектов. Этот процесс не использует Hibernate для извлечения данных ради производительности, что звучит немного надуманно для меня. Этот процесс также обновляет некоторые поля некоторых объектов из коллекции, используя Hibernate.
Процесс 2 получает объект, похожий на один из тех, что находятся в коллекции (в основном одна и та же строка в БД) и как-то обновляет его. Этот процесс использует Hibernate.
Поскольку процесс 1 и процесс 2 не знают друг о друге, они могут обновлять один и тот же объект, оставив его в несогласованном состоянии.
Например:
Мне нужно иметь дело с этой ситуацией.
Итак, что может быть сделано?
Сейчас я вижу два пути:
Любые идеи были бы очень полезны
заранее спасибо
Поскольку процесс 1 и процесс 2 не знают друг о друге, они могут обновлять один и тот же объект, оставив его в несогласованном состоянии.
Я бы переформулировал это: оба процесса могут обновлять одни и те же данные. Только Hibernate будет знать объекты, в то время как другой процесс, похоже, получает доступ к данным через JDBC.
Я бы выбрал вариант 2, который будет включать столбец версии в ваших сущностях. После этого IIIB Hibernate добавит условие WHERE version = x
к запросам и проверит, были ли обновлены все строки, и если бы не было OptimistictLockException
. Вы можете сделать то же самое в своих JDBC-запросах, то есть UPDATE... SET... version = x + 1... WHERE version = x AND additionalConditions
и проверить количество строк обновлений, возвращаемых JDBC.