Sobes.tech
Junior — Middle

Kā īstenot optimistiskās bloķēšanas mehānismu Hibernate, lai novērstu konfliktus vienlaicīgas piekļuves gadījumā datiem?

sobes.tech AI

Atbilde no AI

Optimistiskā bloķēšana Hibernate tiek īstenota ar @Version anotāciju. Šī anotācija pievieno entitātei īpašu lauku (piemēram, version), kas automātiski palielinās katru reģistra atjaunināšanas brīdī. Saglabājot, Hibernate pārbauda, vai datu bāzē esošā versija sakrīt ar atjaunināmā objekta versiju. Ja versijas nesakrīt, tas nozīmē, ka dati ir mainīti ar citu transakciju, un tiek izsviesta izņēmuma OptimisticLockException.

Piemērs:

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

    @Version
    private int version;

    private String name;
    private int quantity;

    // get un set
}

Tādējādi, vienlaicīgi piekļūstot tai pašai ierakstam, ja viens lietotājs atjaunina datus, bet otrs mēģina saglabāt novecojušu versiju, Hibernate atklās konfliktu un novērsīs datu pārrakstīšanu, neņemot vērā cita lietotāja izmaiņas.