悲觀鎖機制是數據庫自帶,一般都是在sql後加for update,這裏就暫時不討論
JPA的樂觀鎖
1.首先在entity中加入對應的註解@Version
相當於執行
UPDATE MYENTITY SET ..., VERSION = VERSION + 1 WHERE ((ID = ?) AND (VERSION = ?))
在JPA裏面,發現版本號不一致,會報異常,如果是單純的Bean中,只能捕捉EJBException異常,但在service中,能捕捉到EJBTransactionRolledbackException,然後無非是給前臺一個友好提示,說明該條數據操作失敗等等。
2.如果某條數據不希望受version控制,建議可以執行原生sql
如:UPDATE TABLE SET ...,VERSION = VERSION + 1 WHERE ((ID = ?)即可
注意UPDATE是原子操作,一條UPDATE執行時,同一時間有且只有一條SQL執行,即使用原生SQL就可以擺脫VERSION的控制