@Transactional 鎖表嗎?關於Spring注解@Transactional和SQL for update 的一些理解
工作前幾年中,一直接觸的是JDBC原生的事務處理方式。
1. 獲取 connection
2. try {
con = getDBConnection();
// sql for update 鎖A表, B表。。表記錄
//增刪改查
多個業務處理,
con.commit()
//最后提交
3. } catch Exception {
con. 回滾
}
4. finally {
con.close();
}
后期用了spring 后, @Transactional 實際上代替了try catch finally . 還有 con獲取,提交,回滾的操作。
但是 鎖表記錄的動作,並不在 這個注解的職責里。
所以,在處理關鍵事務時,還是得在 dao層 更新記錄前,查詢記錄加行級鎖的。 俗稱悲觀鎖, 或者 不加鎖使用version判斷。俗稱樂觀鎖。
來搞一下的。
這兩個是不同的職責范圍,即:@Transactional注解不包含for update.
。如此。而已。