如果无法锁定行将javax.persistence.EntityManager.find返回null?
Javadoc中,它说: 找不到(类entityClass, 对象的PrimaryKey) 查找主键。 参数: entityClass - 的PrimaryKey - 返回: 找到的实体实例或NULL,如果实体不存在如果无法锁定行将javax.persistence.EntityManager.find返回null?
当无法获取锁的记录,它也返回null?
在我的程序,这似乎是当它不能获得锁所涉及的行返回null。
当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} [...]
但是,您如何知道是否从执行SQL或从EntityManager.find()引发异常? – 2012-02-08 22:16:40
它总是在下面的SQL。 Em.find()使用SQL来查找记录。 – MaDa 2012-02-09 09:31:15
我不认为找到锁定。 – 2012-01-27 23:10:03
当我检查了日志,它翻译成“为更新选择...”,并不意味着锁? – 2012-01-30 15:02:58
如果它选择了更新,那么确实是我错了,并找到JPA不锁。 – 2012-01-30 15:05:31