簡體   English   中英

同一實體的並發更新

[英]Concurrent updates of same entity

先生們/女士們,

我對同一個實體的並發更新有問題。

流程1獲取對象的集合。 為了提高性能,此過程不使用Hibernate來檢索數據,這對我來說有點牽強。 此過程還使用Hibernate更新了集合中某些對象的某些字段。

流程2獲得一個與集合中的對象相似的對象(基本上是DB中的同一行),並以某種方式對其進行更新。 此過程使用Hibernate。

由於進程1和進程2彼此不了解,因此他們可以更新同一實體,從而使其處於不一致狀態。

例如:

  1. 流程1獲取集合
  2. 流程2獲得一個實體,並刪除其某些屬性以及鏈接到的實體
  3. 進程1返回並嘗試保存該實體,並獲取未找到的實體異常

我需要處理這種情況。

那該怎么辦呢?

現在,我看到兩種方法:

  1. 在數據庫上方創建一個層,該層將跟蹤系統中的每個實體,從而有效地禁止創建同一實體的多個實例
  2. 設置樂觀鎖,由於Hibernate無法獲得某些實體,因此我需要以某種方式實現它

任何想法都將非常有幫助

提前致謝

由於進程1和進程2彼此不了解,因此他們可以更新同一實體,從而使其處於不一致狀態。

我將這樣重新表述:兩個進程都可以更新相同的數據 只有Hibernate知道實體,而其他進程似乎通過JDBC訪問數據。

我會選擇選項2,它會在您的實體中涉及版本列。 然后,IIRC Hibernate將向查詢中添加WHERE version = x條件,並檢查是否所有行都已更新,否則將引發OptimistictLockException 您可以在JDBC查詢中執行相同的操作,即UPDATE ... SET ... version = x + 1 ... WHERE version = x AND additionalConditions並檢查JDBC返回的更新行數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM