带有DB2的JPA - 具有超时的悲观锁定

时间:2016-04-18 12:33:10

标签: hibernate jpa db2 timeout pessimistic-locking

我对使用JPA的实体进行悲观锁定。 db是DB2 v10.x,JPA 2.0,而不是Hibernate 4.x。

我不想等到锁可用(它被长时间运行的进程锁定,保持对实体的锁几分钟)。我希望它早点失败(说“其他人在这里工作”),让用户稍后决定是否要重试。我正在使用:

Map<String, Object> properties = new HashMap<>();
properties.put("javax.persistence.lock.timeout", 0);
getEntityManager().lock(entity, LockModeType.PESSIMISTIC_WRITE, properties);

但超时提示不受尊重(注意:无论我如何配置它,在Spring配置级别,在JDBC连接级别或其他任何方面)。将它设置为你喜欢的任何东西都不会改变。

我怀疑这是因为它被翻译成了SQL:

select ID from FOOBAR where ID =? and VERSION =? **for read only with rs use and keep update locks**

..并且在任何地方都没有“NOWAIT”条款。

是否可以按预期使超时工作,也许让JPA执行SELECT ... FOR UPDATE NOWAIT?另外,如果有人知道为什么JPA将其翻译成该陈述而不是更常见的陈述呢?

0 个答案:

没有答案