悲觀鎖與樂觀鎖

    悲觀鎖機制是數據庫自帶,一般都是在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的控制



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章