Como evitar o problema de simultaneidade no UPDATE via iBatis

Nosso aplicativo da Web Java EE executa operações de banco de dados usando o iBatis (ORM). O fluxo de operação do banco de dados é como abaixo

Fluxo : JSP ---> Action ---> ServiceIMpl ---> DaoImpl ----> Chamando consulta de atualização através de 'IBatis

Nota: As classes Action, Service e DAO são instanciadas usando a técnica de Injeção de Dependência do Spring 2.5. Nós usamos o Struts2.

Problema: 2 usuários simultâneos pesquisam o mesmo registro e o Usuário1 atualiza o Atributo1, enquanto o Usuário2 atualiza o Atributo2. Usuário1 primeiro clica em 'Salvar' e, em seguida, o usuário2 clica em salvar (eles seguem um ao outro com uma diferença de poucos segundos). Quando vemos os dados no banco de dados, apenas a atualização do Usuário1 está presente. As colunas Audit também mostram apenas a atualização do User1. A atualização do User2 no Atributo2 não é feita, no sametime, nenhuma exceção é lançada.

Nós tentamos usar a transação begin e commit no iBatis em torno da invocação da consulta de atualização definida no xml sqlmap. O mesmo problema persiste. Também tentamos remover esses comandos de transação, mas o problema persiste.

Devemos fazer algo especial / diferente para lidar com a simultaneidade durante as atualizações? Os ORMs, como os iBatis, não lidariam sozinhos?

Informação adicional: Investigação adicional revelou as seguintes informações.

Quando Usuário1 e Usuário2 clicam no registro, os dados completos são buscados para visualização.

Agora, quando Usuário1 e Usuário2 alteram alguns atributos e clicam em salvar (ao mesmo tempo), digamos que os dados do Usuário 1 são atualizados e, enquanto os dados do Usuário2 estão sendo atualizados, os dados já atualizados do Usuário1 são sobrescritos e perdidos.

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

questionAnswers(2)

yourAnswerToTheQuestion