2012-10-29 39 views
0

背景:我正在研究一個MYSQL數據庫,其中多個實例從同一個帳戶表中讀取。我想使用Hibernate查詢語言來實現行級排他鎖,以避免髒讀。如何使用Hibernate查詢語言實現行級鎖定?

我的代碼如下。

List<AccountTableBean> currentRequestslist = sessionFactory.getCurrentSession() 
       .createQuery("from Account where status = :finalStatus") 
       .setLockMode("MappCurrentRequests", LockMode.PESSIMISTIC_READ) 
       .setParameter("finalStatus","Active").list(); 

目前,我已經在整個表上使用了Pessimistic_read。我可以申請鎖定單行嗎?任何示例都會非常有幫助。

謝謝 Gendaful

回答

1

鎖定類型由數據庫本身暗示。

如果您正在使用MyISAM存儲引擎,無論您嘗試多麼努力 - 無論是在原始SQL還是JDBC中,都無法強制執行行級鎖定。 MyISAM根本不支持行級鎖。

只需切換到使用InnoDB,您甚至不必撥打setLockMode以獲得必要的鎖定類型。

manual

MySQL使用InnoDB錶行級鎖以支持多個會話同時 寫訪問,使其適用於 多用戶,高併發,和OLTP應用程序。對於MyISAM,MEMORY和MERGE表,MySQL使用 表級鎖,因此只允許 一次更新這些表,使它們更適合於只讀,主要讀取或單用戶應用程序。