數(shù)據(jù)庫的鎖機制
在進行SELECT操作時,通常接下來會進行UPADTE的操作,如果希望COMMIT前,所SELECT的數(shù)據(jù)不會被其他線程SELECT出來,則兩個線程都加FOR UPDATE/FOR UPDATE NOWAIT關鍵字,這樣數(shù)據(jù)庫就會鎖定這些記錄,加了FOR UPDATE的會進行等待,直到上一線程結(jié)束,加了FOR UPDATE NOWAIT的線程則直接拋出異常,這種機制稱為數(shù)據(jù)庫的鎖機制。
HIBERNATE中的實現(xiàn):
LockMode.NONE :有緩存用緩存,沒緩存則從數(shù)據(jù)庫讀
LockMode.READ :直接從數(shù)據(jù)庫讀,不使用緩存數(shù)據(jù)
LockMode.WRITE :在insert update數(shù)據(jù)的時候,HIBERNATE內(nèi)部使用的。
以上3種均為HIBERNATE級別的鎖,也就是緩存級別的鎖。
下面2種為數(shù)據(jù)庫級別的鎖:
LockMode.UPGRADE:相當于SQL語句select for update,被select的數(shù)據(jù)都被數(shù)據(jù)庫鎖住了,不能被其他事務修改。
LockMode. UPGRADE_NOWAIT :是ORACLE數(shù)據(jù)庫特有的select for update nowait
LockMode.READ :直接從數(shù)據(jù)庫讀,不使用緩存數(shù)據(jù)
LockMode.WRITE :在insert update數(shù)據(jù)的時候,HIBERNATE內(nèi)部使用的。
以上3種均為HIBERNATE級別的鎖,也就是緩存級別的鎖。
下面2種為數(shù)據(jù)庫級別的鎖:
LockMode.UPGRADE:相當于SQL語句select for update,被select的數(shù)據(jù)都被數(shù)據(jù)庫鎖住了,不能被其他事務修改。
LockMode. UPGRADE_NOWAIT :是ORACLE數(shù)據(jù)庫特有的select for update nowait
posted on 2012-04-19 17:56 paulwong 閱讀(356) 評論(0) 編輯 收藏 所屬分類: HIBERNATE