同一個事務里 查詢 已刪除可是未提交的數據[bug記錄]


前幾天犯了個低級錯誤。在一個事務方法里老是查詢不到某條記錄,可是debug卡住時,用db工具查。又能查出值。

經過一番折騰,原來是我在同一個事務里 查詢 了已刪除可是未提交的數據。當然查詢不到了!

。!


情況是這種:

Service層(spring事務管理配置在這一層,此方法配了PROPAGATION_REQUIRED)有個方法function m()寫得非常長。

當中有2步是 

1. delete from B where objectid =‘TestB’

2. select * from A where A.bobjectid in (select objectid from B where objectid =‘TestB’)

因為 step 1和step 2 在同一個事務方法。並且step1已經刪除了TestB。故step2肯定查詢不到記錄。

事實上這是個非常easy發現的問題,可是因為m方法,步驟較多較復雜。並且step1和step2的代碼位置相隔較遠。m方法最先也不是本人編寫的,

所以被搞得有點蒙,直到排除了其他全部的可能,才確認是事務未提交造成的。


解決的方法so easy了,把step2 提到step1前面就能夠了。

今天特地補一篇。提醒以后不要浪費時間犯這樣的錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM