Cómo evitar problemas de concurrencia en ACTUALIZACIÓN a través de iBatis

Nuestra aplicación web Java EE realiza operaciones de base de datos utilizando iBatis (ORM). El flujo de operación de la base de datos es el siguiente

Fluir : JSP ---> Action ---> ServiceIMpl ---> DaoImpl ----> Llamando a la consulta de actualización a través de 'IBatis

Nota: Las clases de Acción, Servicio y DAO se crean mediante la técnica de inyección de dependencia de Spring 2.5. Utilizamos Struts2.

Problema: 2 usuarios simultáneos buscan el mismo registro y User1 actualiza Attribute1 mientras que User2 actualiza Attribute2. El usuario 1 primero hace clic en "Guardar" y luego el usuario 2 hace clic en guardar (se siguen entre sí con una diferencia de unos pocos segundos). Cuando vemos los datos en la base de datos, solo está presente la actualización del Usuario1. Las columnas de auditoría también muestran solo la actualización del Usuario1. La actualización de User2 en Attribute2 no se realiza, en el mismo tiempo, no se lanzan excepciones.

Intentamos utilizar la transacción de inicio y la transacción de compromiso en iBatis alrededor de la invocación de la consulta de actualización definida en el xml sqlmap. El mismo problema persiste. También intentamos eliminar esos comandos de transacción, pero el problema persiste.

¿Debemos hacer algo especial / diferente para manejar la concurrencia durante las actualizaciones? ¿No se manejarían los ORM como iBatis por sí mismos?

Información adicional: Más investigación reveló la siguiente información.

Cuando Usuario1 y Usuario2 hacen clic en un registro, se obtienen datos completos para su visualización.

Ahora, cuando User1 y User2 cambian algunos atributos y hacen clic en guardar (al mismo tiempo), digamos que primero se actualizan los datos de User1 y luego mientras se actualizan los datos de User2, los datos ya actualizados de User1 se sobrescriben y se pierden.

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta