2013-10-17 43 views
1

如何防止我的Java web-start應用程序中丟失的更新問題?情景是,如果2個用戶正在訪問相同的記錄,並且一個人只是進行一些修改並更新數據庫。其他用戶仍然擁有舊數據,並且不知道第一個用戶已經更改了數據,他進行了一些修改並更新了數據庫。這導致第一個用戶丟失更新。如何防止使用hibernate的Java應用程序丟失更新?

我需要確保在保存應用程序之前需要將記錄與數據庫進行比較,如果發現有更改,則需要通知用戶並以某種方式確保用戶在病房後看到更改當前用戶可以應用他的更改並再次提交給數據庫。

以下是我的Java Web的細節開始應用:

  • 應用程序使用的Java Web啓動技術,與Tomcat7運行Servlet的通信。
  • DB是SQL Server 2012.
  • 服務器計算機:Windows 64位2008 R2企業服務器。
  • 的Java 7更新25 64位
  • Hibernate的版本 - 3.0

有什麼辦法來實現這一點?

請指教。

預先感謝

回答

1

這聽起來像一個典型的例子爲optimistic strategy例如

樂觀併發控制(OCC)是關係數據庫管理系統併發控制方法 該假定多個 交易可以完成,而不影響彼此,並且 因此事務可以不鎖定數據資源 繼續進行該他們影響。在提交之前,每筆交易都會驗證其他交易是否已修改其數據。如果檢查顯示 衝突修改,提交事務回滾

也許保留記錄版本號。

例如每個記錄都會保留一個記錄版本號。當客戶端收到客戶端時,它也會收到版本號。修改後,服務器將記錄號與數據庫中的記錄號進行比較,如果不是發生更改,則會使用遞增的版本號寫入新記錄。

然後第二個客戶端將進入相同的記錄號(即記錄正在被兩個客戶端更新)。這次服務器會認識到版本號已經改變,並拒絕更新。

請注意,存在各種實施選項。數據庫可以使用記錄號或時間戳來實現這一點。數據庫可以保留編輯歷史記錄,或簡單地記錄最新版本。

1

防止「丟失更新」之類的數據異常通常由數據庫負責。爲此,它使用對使用數據庫的應用程序透明的鎖定機制。只要您正確使用交易概念,它就應該可以工作。有很多不同的鎖定概念會影響性能以及防止哪些數據異常。我不是數據庫管理員,但這應該是可配置的。

相關問題