只要其中一個應用程序在共享表上執行數據庫更新,您應該沒問題。你絕對不希望發生的是:
app1: delete/update table1.record24
app2: delete/update table1.record24
因爲當Hibernate寫入記錄的過程會注意到一個數據發生了變化,並拋出一個錯誤。作爲一個經典的海森堡,它真的很難再現。
另一方面,當責任明確分開(應用程序共享數據以供閱讀,但不刪除/更新相同的表格)時,應該可以。將該行爲記錄爲未來升級時可能沒有考慮到這一點。
編輯1:回答評論
您可以通過設計解決併發問題。對於任何給定的表:
- 這兩個應用程序可以插入
- 這兩個應用程序可以選擇
- 其中的應用程序也可以更新/刪除該表
你的前端可能會插入到表,並且後端可以讀取這些表, 根據需要更新行,創建新的結果行並刪除行作爲清理。
或者,當應用程序進行通信時,前端可以將給定任務的記錄所有權轉移給業務後端,從而在完成時返回所有權。確保休眠緩存被刷新(執行事務),並且在傳輸所有權之前,沒有任何該任務的休眠對象正在使用。
遊戲的訣竅是確保Hibernate不會嘗試寫入其他應用程序更改的記錄,因爲這會導致StaleStateException。
和舉例的我是如何解決類似的問題:
- 應用1接收數據,並在表1中寫入它
- 應用2讀取表1,對其進行處理,並寫入/更新表2
- 應用2刪除表1中的處理記錄
請注意,應用1只寫入共享表。它還從其他表中讀取,寫入和更新,但這些表不會被應用程序2訪問,所以這沒有問題。
這可能屬於ServerFault。 – Maha 2009-12-08 07:39:09