"Select ... for update" wordt ondersteund in Hibernate via LockMode.UPGRADE die u bijvoorbeeld kunt instellen in een NamedQuery .
Maar het gebruik van applicatie/handmatige tabelrijvergrendeling heeft verschillende nadelen (vooral wanneer een databaseverbinding halverwege een transactie wordt verbroken) en uw update-procedure kan het zonder:
- Start transactie.
- update tabel set state='PENDING', server_id=1 waar state='IN PROGRESS';
- Transactie uitvoeren
- selecteer uit tabel waarin state='PENDING' en server_id=1;
- [records verwerken]
Elke server moet een uniek nummer hebben om dit te laten werken, maar het zal minder foutgevoelig zijn en je laat het DBMS doen waar het goed in moet zijn:isolatie (zie ZUUR ).