How to Avoid Lock wait timeout exceeded exception.?

前端 未结 7 1374
独厮守ぢ
独厮守ぢ 2020-12-09 10:32
    java.sql.SQLException: Lock wait timeout exceeded; try restarting tra
nsaction at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
        at com.m         


        
7条回答
  •  被撕碎了的回忆
    2020-12-09 10:45

    (Respectfully ignoring DB specific answers)

    When using a formal CRUD schema with all DB traffic channelled through a Singleton class you can still encounter thread-locking. This often occurs due to an oversight between yourself, a college, and the Hibernate team. Therefore, it is quickest to review your own code for bugs -- paying particular attention to hibernate's core rules.

    Normally a CRUD interface has public 'Create', 'Read', 'Update' and 'Delete' methods that share common private methods. This is done for DRY best practise. However, in doing so, these methods will work flawlessly most of the time, but not all of the time.

    So, how to test and solve thread-locking?

    Ensure:

    • session.save(myObj) actions firstly check on the PK's uniqueness
    • All uniqueResult() queries indeed return 1 result, And;

      (Important!) Focus Test-cases that:

      • Introduce PK duplicates
      • Update/Read/Delete non-existent records/entries/rows

    Finally, use @AfterSuite (TestNG) to delete all table entries. Any insufficient implementation will yield another thread lock on the aforementioned operation ... otherwise, you are golden.

提交回复
热议问题