当记录被DB级别的另一个应用程序锁定时,乐观JPA锁定的行为

时间:2016-06-29 15:03:23

标签: hibernate jpa informix optimistic-locking

我们有一个由多个技术堆栈使用的Informix数据库表,如ESQL / C,Java(JPA),db批量更新。以下是生产问题,一直困扰着我们(不过常常)。

Caused by: org.hibernate.exception.GenericJDBCException: could not update: 
Caused by: java.sql.SQLException: Could not do a physical-order read to fetch next row.
Caused by: java.sql.SQLException: ISAM error: record is locked.

为简洁起见,我删除了一些堆栈跟踪。

经过初步分析,我们发现ESQL / C和Java正在尝试同时更新记录。 ESQL / C锁定了JPA试图刷新的记录。我们的JPA实体有@Version,专为乐观锁定而设计。

现在,我的问题是,当JPA的实体设计用于乐观锁定时,JPA如何表现,但它尝试更新的记录被数据库级别的完全不同的应用程序锁定。

  • 数据库规格:页面已锁定,无等待 - 均为默认值。
  • JPA规范:READ_UNCOMMITTED,等待超时 - 60秒。

我的想法:

  1. 设置表的锁定模式是否可以解决?
  2. 这将如何与JPA级别的乐观锁定设置一致,设计为永远不会涉及锁定。

0 个答案:

没有答案