我正在通過Hibernate文檔遇到了LockModes
。這些與我們用於數據庫的Isolation levels
相同嗎?它們與Isolation levels
有什麼不同?休眠鎖定模式/鎖定選項
我正在嘗試一個簡單的例子,並且觀察到,當我使用session.load()方法本身而不是在調用加載對象上的某些方法時敲擊數據庫時,hibernate正在敲擊數據庫。
session.beginTransaction(); //Line 1
DomesticCat d1 = (DomesticCat)session.load(DomesticCat.class, 1L,LockOptions.UPGRADE); //Line 2
d1.meow(); //Line 3
session.getTransaction().commit(); //Line 4
我發現hibernate在第2行本身遇到數據庫,請告訴我爲什麼會發生這種情況?如果我刪除LockOptions參數,那麼DB命中上的Line 3
代替Line 2
的API for LockOptions給出了非常小的細節,他們都做了什麼:
READ代表LockMode.READ(超時+範圍不適用)
這是什麼意思timeout + scope do not apply
?
升級表明LockMode.UPGRADE(永遠等待鎖和虛假的意義 範圍只有實體鎖定)
當我們要使用升級?這是什麼意思scope of false meaning only entity is locked
?
可能這些是有經驗的人的基本問題,請幫助我理解這裏的概念。
感謝您尋找我的文章。
謝謝很多詳細,簡單,非常明確的解釋。 – Chaitanya
你能告訴我什麼是'超時+範圍不適用',另一個'虛假意義的範圍只有實體被鎖定'? – Chaitanya
'timeout'不適用於讀取鎖定,因爲用於實現鎖定的方法沒有被迫等待的風險。範圍不適用於讀鎖,因爲範圍的定義如此。範圍是錯誤的意味着你只能鎖定DomesticCat。如果範圍是真的,那麼您每次鎖定DomesticCat時都會鎖定所有的小貓。這在RDBMS中是危險的,必須小心避免死鎖。 – Affe