Ինչպե՞ս իրականացնել օպտիմիստական արգելափակման մեխանիզմ 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-ը կհայտնաբերի հակասությունը և կխոչընդոտի տվյալների վերագրումը առանց հաշվի առնելու մյուս օգտատիրոջ փոփոխությունները։