Как предотвратить проблему параллелизма в ОБНОВЛЕНИИ через iBatis

Наше веб-приложение Java EE выполняет операции с базой данных, используя iBatis (ORM). Процесс работы с базой данных выглядит следующим образом

Flow : JSP --- & gt; Action ---> ServiceIMpl --- & gt; DaoImpl ---- & gt; Вызов запроса на обновление через & apos; Ibatis

Note: Акция, Сервис & amp; Классы DAO создаются с использованием техники инъекции зависимостей в Spring 2.5. Мы используем Struts2.

Problem: 2 одновременных пользователя ищут одну и ту же запись, а Пользователь1 обновляет Атрибут1, а Пользователь2 обновляет Атрибут2. Пользователь1 сначала нажимает на кнопку «Сохранить». и затем пользователь2 нажимает кнопку «Сохранить» (они следуют друг за другом с разницей в несколько секунд). Когда мы видим данные в базе данных, присутствует только обновление пользователя 1. Столбцы аудита также показывают только обновление пользователя 1. Обновление User2 для Attribute2 не выполнено, в то же время не генерируется никаких исключений.

Мы попытались использовать транзакцию begin и commit в iBatis, связанную с вызовом запроса на обновление, определенного в sqlmap xml. Та же проблема сохраняется. Мы также попытались удалить эти команды транзакции, но проблема сохраняется.

Должны ли мы делать что-то особенное / другое для обработки параллелизма во время обновления? Разве ORMs, такие как iBatis, не справятся сами?

Additional Info: Дальнейшее расследование выявило следующую информацию.

Когда пользователь1 & amp; Пользователь2 нажимает на запись, ее полные данные извлекаются для просмотра.

Теперь, когда оба пользователя1 & amp; Пользователь 2 изменяет несколько атрибутов и нажимает кнопку сохранения (одновременно), скажем, сначала обновляются данные пользователя 1, а затем, когда данные пользователя 2 обновляются, уже обновленные данные пользователя 1 перезаписываются & amp; потерял.

What approach is usually followed in such screens to handle such scenarios ?

Ответы на вопрос(2)

Ваш ответ на вопрос