Будет ли javax.persistence.EntityManager.find возвращать ноль, если не удастся заблокировать строку? - PullRequest
1 голос
/ 28 января 2012

От javadoc он сказал: T find (Класс entityClass, Объект primaryKey) Найти по первичному ключу. Параметры: entityClass - основной ключ - Возвращает: найденный экземпляр объекта или ноль, если объект не существует

Когда он не может получить блокировку для записи, он также возвращает ноль?

В моей программе кажется, что null возвращается, когда он не может получить блокировку для вовлеченной строки.

1 Ответ

0 голосов
/ 07 февраля 2012

Когда 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} [...]
...