Sobes.tech
Junior — Middle

Wie implementiert man einen Mechanismus für optimistisches Sperren in Hibernate, um Konflikte beim gleichzeitigen Zugriff auf Daten zu vermeiden?

sobes.tech KI

Antwort von AI

Optimistisches Sperren in Hibernate wird mit der Annotation @Version implementiert. Diese Annotation fügt der Entität ein spezielles Feld (z.B. version) hinzu, das bei jeder Aktualisierung des Datensatzes automatisch erhöht wird. Beim Speichern überprüft Hibernate, ob die Version in der Datenbank mit der Version des zu aktualisierenden Objekts übereinstimmt. Wenn die Versionen nicht übereinstimmen, wurden die Daten von einer anderen Transaktion geändert, und eine OptimisticLockException wird ausgelöst.

Beispiel:

@Entity
public class Product {
    @Id
    private Long id;

    @Version
    private int version;

    private String name;
    private int quantity;

    // Getter und Setter
}

Auf diese Weise erkennt Hibernate bei gleichzeitigem Zugriff auf denselben Datensatz Konflikte, wenn ein Benutzer die Daten aktualisiert und ein anderer versucht, eine veraltete Version zu speichern, und verhindert so das Überschreiben von Daten ohne Berücksichtigung der Änderungen des anderen Benutzers.