Ich bin auf der Suche nach einer Möglichkeit, eine Entität in einer DB zu speichern und sofort sperren, um zu vermeiden, dass andere Thread auf die Entität zugreifen, bevor der Thread-Ersteller endet.
Ich benutze Hibernate 4.3.11 und Spring 4.2.5.
Vielen Dank im Voraus.Speichern und Sperren von Entity mit Hibernate
Antwort
Ein möglicher Weg sollte Transaktion Ebene zu Serialisierung erhöhen. Diese Ebene stellt sicher, dass Daten gesperrt sind, bis sie in anderen Transaktionen nicht verwendet werden.
Obwohl es Sperrmodus - LockMode.WRITE - sondern der Dokumentation wird
eine Schreibsperre erhalten wird, wenn ein Objekt aktualisiert wird oder eingesetzt ist. Dieser Lock-Modus ist nur für internen Gebrauch und ist kein gültiger Modus für Last() oder Schloss() (die beiden Ausnahmen auslösen, wenn WRITE angegeben ist) ..
Wenn es nur, dass Sie nur sind Wenn Sie Zeilen einfügen, können Sie die Datenbankzeilen nicht mit hibernate sperren, da die Zeilen noch nicht festgeschrieben sind. In dem Moment, in dem Ihr Code (Hibernate oder ohne) Zeilen in die Datenbank einfügt und noch nicht festschreibt, werden transaktionale Sperren gehalten, die beim Transaktions-Commit freigegeben werden. Die Art der Sperren und die Art und Weise, wie dies intern geschieht, ist datenbankspezifisch. Wenn Sie jedoch in Sperr einige Zeilen interessiert sind (bereits vorhandenen), dann Sie die Daten abfragen können
session.get(TestEntity.class, 1, LockMode.PESSIMISTIC_WRITE);
Dies wird halten eine pessimistische Sperre (normalerweise durch SELECT Ausgabe .... FOR UPDATE) für die Dauer der Transaktion und kein anderer Thread/Transaktion kann die Daten ändern, für die die Sperre ausgeführt wurde.
Hibernate Angebot zwei Arten von Schlössern Optimistisch und pessimistisch. Es ist geradlinig.
1) Optimistisch Anwendungen Versionierung, wo in eine Versionsspalte in der Datenbank es haben wird, und überprüfen, bevor es aktualisiert oder aber die Ausnahme werfen
2) Pessimistisch ist soetwas wie eine Datenbank auf dieser Zeile die Verriegelungsgriffe und es wird frei bekommen, nachdem der Vorgang abgeschlossen ist, gibt es nur wenige Möglichkeiten gibt es, das ist ähnlich wie wie Sie wie Lesesperre vorstellen, schreiben sperren
https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html
- 1. Lucene/Hibernate Suche sperren Ausnahme
- 2. speichern und abrufen Bild von Hibernate
- 3. Hibernate optimistische Sperren Exception
- 4. Über Hibernate speichern mit Dynamic-Map-Entity-Modus
- 5. Erstelle Hibernate-Entity-Beans von XSD
- 6. Speichern und Bearbeiten in DataBase (Entity Framework)
- 7. CrudRepository und Hibernate: Speichern (List <S>) vs speichern (Entity) in der Transaktion
- 8. Hibernate Entity Proxy-Initialisierung
- 9. Problem mit Entity-Update mit Jpa/Hibernate
- 10. Hibernate speichern relationale Tabelle
- 11. Hibernate Objekt speichern Frage
- 12. Entity von anderen vielen verschiedenen Entitäten gemappt (mit Hibernate)
- 13. Hibernate org.hibernate.MappingException: Unbekannte Entity-Laufzeitfehler
- 14. Hibernate-Kriterien Verwenden von GROUP BY und RETURN ENTITY LIST
- 15. Datenbankzeile sperren bei Lesen mit Entity Framework Core
- 16. Hibernate Entity aus mehreren Schemas
- 17. SQLite3 und Freigeben von Sperren
- 18. Sperren und Entsperren mit VBA
- 19. LazyInitializationException in Hibernate Entity Getter
- 20. Hibernate - große Dateien speichern
- 21. Hibernate: java.lang.ClassCastException bei speichern
- 22. eine Tabelle mit einem ausgewählten Sperren in Entity Framework
- 23. Hibernate-Entity mit mehr als einer Eigenrelation (rekursive Relationen)
- 24. JPA-Hibernate mit Hibernate Interceptor
- 25. C#: Leistungsproblem mit Sperren
- 26. HIbernate Daten überschreiben, wenn persisten/save entity
- 27. JPA Verschachtelte Transaktionen und Sperren
- 28. Speichern complexa Daten mit Entity-Framework
- 29. Hibernate Complex Typ speichern
- 30. Sammlung als JSON mit Entity Framework speichern
Vielen Dank für Ihre Antwort. Auf diese Weise wird die gesamte Tabelle gesperrt. Ich möchte nur die neue Entität sperren. – nuno
Je höher die Isolationsstufe, desto niedriger die Leistung. –