mybatis 並發問題解決,參考hibernate,mybatishibernate

來源:互聯網
上載者:User

mybatis 並發問題解決,參考hibernate,mybatishibernate

       銀行兩操作員同時操作同一賬戶就是典型的例子。比如A、B操作員同時讀取一餘額為1000元的賬戶,A操作員為該賬戶增加100元,B操作員同時為該賬戶減去 50元,A先提交,B後提交。 最後實際賬戶餘額為1000-50=950元,但本該為 1000+100-50=1050。這就是典型的並發問題

   一個簡單的解決辦法:更新的時候給版本號碼欄位加上 1,然後 UPDATE 會返回一個更新結果的行數,通過這個行數去判斷。


    update account set price = #price #,version=version+1

                              where id=#id# and version=#vsersion#


       如果更新執行返回的數量是 0 表示產生並發修改了,需要重新獲得最新的資料後再進行更新操作。


      Hibernate、JPA 等 ORM 架構或者實現,是使用版本號碼,再判斷 UPDATE 後返回的數值,如果這個值小於 1 時則拋出樂觀鎖並發修改異常。

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.