Как предотвратить проблему параллелизма в ОБНОВЛЕНИИ через iBatis
Наше веб-приложение Java EE выполняет операции с базой данных, используя iBatis (ORM). Процесс работы с базой данных выглядит следующим образом
поток : JSP --->Действие --->ServiceIMpl --->DaoImpl ---->Вызов запроса на обновление через ' Ibatis
Заметка: Акция, Сервис & Классы DAO создаются с использованием Spring 2.5 'Техника внедрения зависимостей. Мы используем Struts2.
проблема: 2 одновременных пользователя ищут одну и ту же запись, а Пользователь1 обновляет Атрибут1, а Пользователь2 обновляет Атрибут2. Пользователь1 сначала нажимает наСохранить' и затем пользователь2 нажимает кнопку «Сохранить» (они следуют друг за другом с разницей в несколько секунд). Когда мы видим данные в базе данных, только User1 'с обновлением присутствует. Столбцы аудита также показывают только User1 'с обновлением. Пользователь2 'Обновление атрибута 2 не выполнено, в то же время исключений не выдается.
Мы попытались использовать транзакцию begin и commit в iBatis, связанную с вызовом запроса на обновление, определенного в sqlmap xml. Та же проблема сохраняется. Мы также попытались удалить эти команды транзакции, но проблема сохраняется.
Должны ли мы делать что-то особенное / другое для обработки параллелизма во время обновлений? Wouldn»t ORM, такие как iBatis, справляются сами?
Дополнительная информация: Дальнейшее расследование выявило следующую информацию.
Когда пользователь1 & Пользователь2 нажимает на запись, это 'полные данные выбираются для просмотра.
Теперь, когда оба User1 & Пользователь2 меняет несколько атрибутов и нажимает кнопку «Сохранить» (одновременно), скажем сначала «Пользователь1»данные обновляются, а затем пока User2 'данные обновляются, уже обновленные данные пользователя 1 перезаписываются и потерял.
What approach is usually followed in such screens to handle such scenarios ?