Tabelle Ebene Sperren in Hibernate
Verwende ich Hibernate version 4. Wir haben ein problem im batch-Prozess. Unser system funktioniert wie folgt
- Wählen Sie Datensätze, die in den "PENDING" Zustand
- Sofort aktualisiert 'IN PROGRESS' state
- Prozess und update auf "ABGESCHLOSSEN" Stand
Das problem, wenn wir zwei Server und Ausführung zur gleichen Zeit, und wir befürchten, dass die Parallelität Problem. So würden wir gerne umsetzen DB-Sperre für die ersten beiden Schritte. Wir verwendet query.setLockOptions()
, aber es scheint nicht zu arbeiten. Es ist eine andere zu haben-Tisch-Ebene sperren oder Row-level-lock, bis es abgeschlossen ist, wählen und aktualisieren. Beide sind in derselben Sitzung.
Wir haben die Optionen in JDBC, die LOCK TABLE <TABLE_NAME> WRITE
. Aber wie implementieren wir in den Ruhezustand versetzt oder ist es möglich zu implementieren, select..for update in den Ruhezustand?
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Select ... for update" unterstützt wird, in den Ruhezustand über LockMode.UPGRADE, die du einstellen kannst, zum Beispiel, eine NamedQuery.
Aber mit application/manuelle Tabelle-row-locking hat einige Nachteile (vor allem, wenn Sie eine Datenbank-Verbindung unterbrochen wird halbem Weg eine Transaktion) und Ihre update-Prozedur kann nicht ohne es:
Muss jeder server eine eindeutige Nummer für diese zu arbeiten, aber es werden weniger Fehler-anfällig und lassen Sie dem DBMS zu tun, was es gut sein soll bei: isolation (siehe SÄURE).