1 回答

TA貢獻1852條經(jīng)驗 獲得超1個贊
隔離級別 REPTEABLE_READ 按預(yù)期工作。
你可以在這里得到一個很好的解釋:
Spring @Transactional - 隔離、傳播
但為了澄清,這是發(fā)生的事情:
Tx1 Tx2
| |
Tx1 Read Wallet 1 100 |
Tx2 Read Wallet 1 | 100
Tx1 Discounts 10 100-10 |
Tx2 Discounts 10 | 100-10
Tx1 Commits | |
Tx2 Commits | |
Tx1 Read Wallet 1 90 |
Tx2 Read Wallet 2 | 90
因此,為了控制這種行為,您有兩個選擇:
使用阻塞操作的可序列化事務(wù)級別以便一一處理(這有性能損失)
實現(xiàn)樂觀鎖(第二個事務(wù)如果同時嘗試修改同一個賬戶會拋出異常)
您可以從這里開始回顧樂觀鎖:JPA 中的樂觀鎖是如何工作的?
添加回答
舉報