Cum se implementează un mecanism de blocare optimistă în Hibernate pentru a preveni conflictele la accesul simultan la date?
sobes.tech AI
Răspuns de la AI
Blocarea optimistă în Hibernate se implementează folosind adnotarea @Version. Această adnotare adaugă în entitate un câmp special (de exemplu, version), care se incrementează automat la fiecare actualizare a înregistrării. La salvare, Hibernate verifică dacă versiunea din bază de date corespunde cu versiunea obiectului care se actualizează. Dacă versiunile nu coincid, înseamnă că datele au fost modificate de o altă tranzacție, și se aruncă o excepție OptimisticLockException.
Exemplu:
@Entity
public class Product {
@Id
private Long id;
@Version
private int version;
private String name;
private int quantity;
// getters și setters
}
Astfel, la accesul simultan la aceeași înregistrare, dacă un utilizator actualizează datele și altul încearcă să salveze o versiune învechită, Hibernate va detecta conflictul și va preveni suprascrierea datelor fără a ține cont de modificările celuilalt utilizator.