Чӣ гуна механизмҳои бехатарии оптимистиро дар 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;
// геттерҳо ва сеттерҳо
}
Бинобар ин, вақте ки ба як сабт ҳамзамон дастрасӣ мешавад, агар як корбар маълумотҳоро навсозӣ кунад ва дигар кӯшиш кунад, ки нусхаи кӯҳнаро сабт кунад, Hibernate низоъро муайян мекунад ва пешгирӣ мекунад, ки маълумотҳоро бидуни ба назар гирифтани тағиротҳои корбарони дигар, дубора навсозӣ кунад.