我们有一个系统,我们偶尔会遇到乐观锁定异常。我们已经在代码中解决了这个问题,但现在我正在查看 JPA 2 并看到它有一个注释 (@Version) 来处理这个问题。
我们遇到的问题是多个事务在一个表上工作,并且使用全表锁这会导致乐观锁定异常,即使没有对相同的记录进行更改。
我们在 JBoss 4.2 服务器上使用休眠,数据库可以是 MySQL 或 SQL Server。
如果我们改为使用@Version,这是否会在两个数据库上强制执行行锁定,或者我们仍然可以期望看到由全表锁定引起的乐观锁定异常?
编辑:
我们实际看到的不是乐观锁定错误,而是死锁:
SQLServerException:事务在锁定资源上与另一个进程死锁,并已被选为死锁牺牲品。重新运行事务。
我们在代码中处理这个问题,但我想知道@Version 在这种情况下是否有帮助。
至少在其中一种情况下,这种死锁是由表锁引起的,其中两个客户端正在处理自己的数据。