如果javax.persistence.EntityManager.find无法锁定行,它将返回null吗?

时间:2012-01-27 22:55:18

标签: jpa openjpa

来自javadoc,它说:  找到(Class entityClass,            对象primaryKey)     按主键查找。     参数:         entityClass -         首要的关键 -     返回:         找到的实体实例,如果实体不存在,则返回null

当它无法获取记录的锁定时,它是否也返回null?

在我的程序中,当它无法获取对所涉及的行的锁定时,似乎返回null。

1 个答案:

答案 0 :(得分:0)

EntityManager.find()无法锁定某行时,它会抛出异常。这是我的一个日志来证明它。在我的情况下,它试图读取已经锁定的记录并在20秒后失败(OpenJPA 1.2.2 + Derby 10.6):

2011-10-14T16:33:22.882 [RemoteParameterStatusListenerInternalContainer-2] ERROR [c.v.r.r.i.g.RemoteParameterStatusInternalGatewayBean] - Exception in [...] org.apache.openjpa.persistence.OptimisticLockException: Unable to obtain an object lock on "DERBY SQL error: SQLCODE: -1, SQLSTATE: 40001, SQLERRMC: Lock : ROW, PRODUCTSTATUS, (389,56)
  Waiting XID : {225252, S} [...], [query here]
  Granted XID : {225234, X} 
Lock : ROW, PRODUCTSTATUS, (389,57)
  Waiting XID : {225234, S} [...]