როგორ განვახორციელოთ ოპტიმისტური ბლოკირების მექანიზმი 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 იპოვის კონფლიქტს და თავიდან აიცილებს მონაცემების გადაწერას სხვა მომხმარებლის ცვლილებების გათვალისწინების გარეშე.