簡體   English   中英

使用hiberante session.load鎖定對象

[英]locking a object using hiberante session.load

Hibernate具有PESSIMISTIC鎖定機制,可用於鎖定數據庫行。

session.lock(Object object,LockMode lockMode)。

可以說我鎖定了一個對象:

1)session.lock(myObject.LockMODE.READ)
2)session.lock(myObject,LockMODE.UPGRADE)
3)session.lock(myObject.LockMODE.UPGRADE_NOWAIT)
  1. 如果其他線程也發布了上述聲明1,將會發生什么? 那個線程會簡單地阻塞嗎?或者會得到某種異常?像CannotAcquireLock異常之類的東西? 我想了解1,2,3的行為。
  2. 如果線程獲取了一個鎖然后死了,那會發生什么?該鎖是自動釋放的嗎?還是該記錄被永遠鎖定了?

      session.lock(myObject,LOCKMODE.SOME_LOCK_MODE) //thread dies . (lets say JVM is killed) 

鎖綁定到事務。 提交或回滾事務后,將釋放它。 如果您的線程死亡並保持事務懸空,則該鎖仍然有效。

試圖獲取鎖的其他線程將僅等待。

如果我沒記錯的話,對lock()的調用會導致select ... for update SQL語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM