我们的 Java EE Web 应用程序使用 iBatis (ORM) 执行数据库操作。数据库操作流程如下
流程:JSP --->Action--->ServiceIMpl--->DaoImpl---->Calling update query thru' IBatis
注意:Action、Service 和 DAO 类是使用 Spring 2.5 的依赖注入技术实例化的。我们使用 Struts2。
问题:2 个并发用户搜索相同的记录,并且 User1 更新 Attribute1,而 User2 更新 Attribute2。用户 1 首先单击“保存”,然后用户 2 单击保存(它们彼此跟随,相差几秒钟)。当我们看到数据库中的数据时,只有 User1 的更新存在。Audit 列也只显示 User1 的更新。User2 对 Attribute2 的更新没有完成,同时没有抛出异常。
我们尝试在 iBatis 中使用开始事务和提交事务,围绕在 sqlmap xml 中定义的更新查询的调用。同样的问题仍然存在。我们还尝试删除这些事务命令,但问题仍然存在。
我们是否应该在更新期间做一些特殊/不同的事情来处理并发?像 iBatis 这样的 ORM 不会自己处理吗?
附加信息:进一步调查显示以下信息。
当用户 1 和用户 2 单击记录时,将获取完整的数据以供查看。
现在,当 User1 和 User2 都更改了一些属性并单击保存(同时)时,假设首先更新 User1 的数据,然后在更新 User2 的数据时,User1 已经更新的数据被覆盖并丢失。
What approach is usually followed in such screens to handle such scenarios ?