2014-11-05 84 views
1

如何在Hibernate或JDBC中處理併發插入。如何處理併發插入JPA

比方說在插入前需要檢查下面的情況。

select count(1) from XYZ; 
if(cnt>2) 
throw exception; 
else 
insert into table 

現在多個線程嘗試在同一時間插入記錄,下面的代碼很有可能會失敗。

如何處理這樣的情況下,此

+0

您可以使用JPA中的'@ Version'或更改數據庫事務隔離或使用'SELECT ... FOR UDATE'。請參閱https://en.wikibooks.org/wiki/Java_Persistence/Locking。 – jocki 2014-11-05 05:25:32

回答

0

您將需要對錶XYZ表級鎖,以獲得正確的計數,而不允許其他事務修改計數。

所以在JDBC:

  1. 開放連接
  2. 在桌子上XYZ
  3. 查詢的表數
  4. 獲取鎖,如果計數不-OK回滾的連接。這將釋放 鎖
  5. else insert
  6. 提交事務。這將釋放鎖

不確定在JPA中是否有可能實現表級鎖定。