使用 Spring boot 和 JPA/hibernate ,我正在尋找一種解決方案,以避免在讀取然后更新物體時另一個行程讀取表記錄。隔離級別臟讀、不可重復讀和幻讀對我來說不是很清楚。我的意思是如果行程#1 開始讀取/更新,我不希望行程#2 能夠讀取舊值(在由#1 更新之前),然后用錯誤的值更新結構。
uj5u.com熱心網友回復:
隔離級別都可以防止不同嚴格級別的讀取更改:
- 臟讀 -> 讀取尚未提交的更改
- 不可重復讀->第二次查詢同一行發現資料變化
- 幻讀 -> 像以前一樣,但不是資料更改,而是發現添加了更多資料(更多在這里)
Serializable級別,是最嚴格的,將阻止讀取任何更改,本質上導致 DB 中的順序處理(無并發)并且可能會解決您的問題
如果我理解正確,您正在尋找的是阻止第二個行程執行任何作業,直到行更新完成 - 這稱為行鎖定,并且也可以直接控制(無需設定可序列化隔離)
在此處查看有關使用 Spring JPA 進行行鎖定的更多資訊:https ://www.baeldung.com/java-jpa-transaction-locks
如果它不是不同的行程(不同的程式),而只是同一個 Java 程式中的不同執行緒,那么簡單synchronized也可以解決問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/504459.html
