我有兩個服務器(後臺和前臺)運行數據庫的連接模塊。它與相同的數據庫連接。Hibernate中的併發事務
我使用JPA(Hibernate實現)和Spring事務管理。
我有以下問題:
我不得不從表A與MAX值+兩個不同字段的1(FIELDA從表A,fieldB從tableB的)更新FIELDA
情況1:
更新之前
TABLEA 爲fA = 100
tableB的 fB的 = 102
後更新
TABLEA 爲fA = 103
tableB的 fB的 = 102
情況2:
更新之前
TABLEA 爲fA = 102
tableB的 fB的 = 100
後更新
TABLEA 爲fA = 103
tableB的 fB的 = 100
與此代碼的方法是事務性的和前做的事情(如創建實體)之後。所以之前提交事務,如果其他應用程序試圖獲得的價值,這將是過時的,它會保存在FIELDA相同的值。休眠會話與分佈式系統不同。
我不能使用數據庫序列(法律問題,因爲它是關於發票)或分佈式緩存對Hibernate(系統問題)
我怎樣才能做到這一點?
謝謝
感謝@ kostja,休眠鎖集羣安全嗎?(我有兩臺服務器共享相同的數據庫) –
不客氣:)是的,鎖是兩個羣集安全:請參閱編輯。 – kostja
Wheer或多或少會遇到競爭狀況是錯誤的問題。正確的問題是:哇你的代碼(或用戶!)能夠解決衝突。如果您可以發出一條錯誤消息,告訴用戶再次嘗試,請使用樂觀鎖定。純程序化和可靠地完成同樣的事情非常困難。捕捉異常只是一個複雜的算法的入口點。這就是爲什麼我認爲崇高的鎖定是解決這個問題的唯一簡單方法。 – BetaRide