悲观锁与乐观锁

    悲观锁机制是数据库自带,一般都是在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的控制



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