我想了解中的Optimistic Lock
是什麼,它是如何正確使用的。樂觀鎖定 - Hibernate的併發問題
我的第一個問題是,它是否只關心的是,當一個Thread
試圖堅持一個Object
,而另一個已在此期間已經改變了相同Object
的狀態拋出一個異常,或者它關心的是兩個修改正確保存?當更新對象鏈並且每個Thread
試圖改變的部分都不同時,是否最後至少爲真?
我想提出一個例子,以便讓我的問題在真實情景下可以理解。這是一個糟糕的設計database-model
但它用來描述這個問題:
假設一個具有下列實體:
@Entity
public class Order{
@OneToMany
private User_Order user_Order;
}
@Entity
public class User_Order{
@OneToMany
private Product product;
}
在單詞的Order
凝聚了一批User-Orders
每個User-Order
擁有一批Products
。假設每個線程excecutes下面的代碼:
Order order = (Order) session.get(Order.class, 1);
//some other code...
Set<User_Order> userOrders = order.getUserOrder();
User_Order myUserOrder = //find my User_Order
List<Products> products = myUserOrder.getProducts();
//modify myUserOrder
//modify products
session.update(order);
顯而易見的是,如果一個線程更新這是由其他線程堅持返回到其初始狀態的Object
order
,然後將數據,因爲最後一個線程不知道有關更新的任何信息。 (正如已經承認的那樣,它是錯誤設計的結果database-model
)
1)如果多個Threads
可以同時超出此代碼,確保併發安全性的最佳方法是什麼? Optimistic Lock
可以在這裏應用嗎?
2)如果一個Thread
(用戶)也可以修改原來屬於其他用戶的數據,那麼上一個問題的答案是什麼?