2015-10-06 144 views
3

我們有一個在Load Balancer下運行的Web應用程序。兩個用戶正在嘗試執行相同的操作,例如,兩個用戶在同一時間創建相同的訂單,創建重複的訂單。在Spring中處理髒讀,使用JPA處理Hibernate

在一個事務提交之前,另一個請求正在檢查是否有任何order.It創建重複條目。兩個請求都試圖同時處理。

  1. 用戶A & B同時提交訂單。
  2. 用戶A的交易驗證,是否有相同訂單的任何現有條目。如果相同訂單沒有其他條目,則會創建條目。
  3. 用戶B的交易也驗證並創建相同。
  4. 如果A的交易完成,那麼B的交易不會發生。但事務提交之前,這兩種請求是有效的,所以它的同一筆訂單創建兩個條目(重複)

我們已經嘗試了下面的選項,

  1. 鎖與鎖類型的EntityManager作爲同步
  2. 隔離級別爲Serializable

但沒有作爲OPTIMISTIC_FORCE_INCREMENT

  • 製作方法選項有所幫助。

    請提出如何繼續。

    由於

  • +0

    您是否嘗試在數據庫中添加任何約束? –

    +0

    當你說重複時,你是說訂單號碼是一樣的嗎?或者兩個用戶都試圖爲同一客戶輸入完全相同的訂單? –

    +0

    @ AmmSokun-我們不能做數據庫約束。該訂單可能已取消。 – Pandiyan

    回答

    0

    設置包含下一順序號單獨的數據庫表。

    將創建訂單拆分爲兩個單獨的數據庫事務。

    第一個讀取並更新訂單號。

    第二個存儲訂單信息。

    處理訂單時,如果第一筆交易失敗,則應在重新開始第二筆交易之前重試。

    相關問題