Oracle
 sql >> база данни >  >> RDS >> Oracle

Защо моето песимистично заключване в JPA с Oracle не работи

Най-накрая успях да го накарам да работи, но с някои модификации. Идеята е да се използва LockModeType.PESSIMISTIC_FORCE_INCREMENT вместо PESSIMISTIC_WRITE. Използвайки този режим на заключване, заданията на Cron се държат по следния начин:

  1. Когато първото задание направи избора за актуализиране, всичко върви както се очаква, но версията на обекта се променя.
  2. Ако друго задание се опита да направи същия избор, докато първото е все още в своята транзакция, JPA стартира OptimisticLockException, така че ако хванете това изключение, можете да сте сигурни, че е изхвърлено за заключване на четене.

Това решение има различни колеги:

  1. SynchronizedCronJobTask трябва да има поле за версия и да е под контрол на версиите с @Version
  2. Трябва да обработвате OptimisticLockException и то трябва да бъде уловено извън метода на транзакционната услуга, за да извършите връщане назад, когато се случи деблокирането.
  3. IMHO е неелегантно решение, много по-лошо от просто заключване, при което Cron Jobs чакат предишните задачи да завършат.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. хибернация диалект за оракул 12c

  2. Получете набори от корекции за база данни

  3. Възможно ли е да се генерират django модели от базата данни?

  4. Решение да не може да изпълни DML операция в заявка?

  5. Oracle – Материализиран изглед все още е достъпен по време на пълно опресняване. Как работи това?