Sobes.tech
Junior — Middle

Ինչպե՞ս իրականացնել օպտիմիստական արգելափակման մեխանիզմ Hibernate-ում՝ տվյալների միաժամանակյա մուտքի ժամանակ բախումները կանխելու համար։

sobes.tech AI

Պատասխան AI-ից

Համոզիչ փակումը Hibernate-ում իրականացվում է @Version նշանով: Այս նշանը ավելացնում է հատուկ դաշտ (օրինակ, version) օբյեկտին, որը ավտոմատ կերպով ավելանում է յուրաքանչյուր գրառման թարմացման ժամանակ: Պահպանման ժամանակ Hibernate-ը ստուգում է, արդյոք տվյալների բազայում գտնվող տարբերակը համընկնում է թարմացվող օբյեկտի տարբերակի հետ: Եթե տարբերակները չեն համընկնում, դա նշանակում է, որ տվյալները փոխվել են այլ գործարքի կողմից, և արտածվում է OptimisticLockException արտակարգ իրավիճակ:

Օրինակ՝

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

    @Version
    private int version;

    private String name;
    private int quantity;

    // getter և setter-ներ
}

Այսպիսով, միաժամանակյա մուտք գործելիս նույն գրանցմանը, եթե մեկը թարմացնի տվյալները, իսկ մյուսը փորձի պահպանել հնացած տարբերակը, Hibernate-ը կհայտնաբերի հակասությունը և կխոչընդոտի տվյալների վերագրումը առանց հաշվի առնելու մյուս օգտատիրոջ փոփոխությունները։