"Select ... for update" wird in Hibernate über LockMode.UPGRADE in die Sie beispielsweise einen NamedQuery .
Aber die Verwendung von anwendungsbezogenem/manuellem Sperren von Tabellenzeilen hat mehrere Nachteile (insbesondere wenn eine Datenbankverbindung mitten in einer Transaktion unterbrochen wird) und Ihre Aktualisierungsprozedur kann darauf verzichten:
- Transaktion starten.
- Tabellensatz aktualisieren state='PENDING', server_id=1 where state='IN PROGRESS';
- Transaktion ausführen
- aus Tabelle auswählen, wobei state='PENDING' und server_id=1;
- [Datensätze verarbeiten]
Jeder Server muss eine eindeutige Nummer haben, damit dies funktioniert, aber es ist weniger fehleranfällig und Sie lassen das DBMS tun, was es gut kann:Isolation (siehe ACID ).