我正在使用hibernate在Soap WebServices應用程序上工作。在這我爲每個訂單生成orderNumbers。要做到這一點我有如下表兩個字段java中的線程同步問題
ORDER_SERIES LAST_ORDER_COUNT
ORD 250
要生成ORDER_NO首先我通過1得到上面的表格和increament LAST_ORDER_COUNT記錄,並與ORDER_SERIES
追加so so ORDER_NO would ORD251
之後,我正在更新上面的表與新的不勒斯nted LAST_ORDER_COUNT
ORDER_SERIES LAST_ORDER_COUNT
ORD 251
我寫了一個方法來完成這個操作意味着得到表記錄,increament LAST_ORDER_COUNT追加既沒有返回訂單並更新LAST_ORDER_COUNT。我使這個方法同步。
但在生產環境中我得到複製ORDER_NOs
我的肥皂web服務越來越爲Android APK調用。
爲什麼ORDER_NO越來越重複
這是因爲你的操作不是原子的。你使用什麼DBMS。其中大多數都是內置的方法來自動創建唯一的ID。 – Fildor
我正在使用postgres數據庫 – user3787163
我找到了解決上述問題的方法。選擇記錄時,我們可以使用「選擇更新」查詢。當我們使用「select for update」選擇任何記錄時,那條記錄將被鎖定,直到我們更新它。意味着沒有兩個線程可以從特定記錄中獲得相同的值 – user3787163