我想使用Spring MVC在表中添加一些虛擬數據。Java防止併發訪問Spring MVC中的方法
下面是代碼: -
在道
public int generateData(){
int iData = 80001;
String qry = "SELECT p FROM TestDomain p";
List<TestDomain> runQry = daoHelper.findByQuery(qry);
if(runQry.size()!=0){
TestDomain tdom = runQry.get((runQry.size()-1));
iData = tdom.getNum_data();
iData++;
}
return iData;
}
這產生要添加到表中的一個整數列的虛設值。基本上,如果表格是空的,它會生成80001,否則增加現有的最大值。請注意,由於某些需求限制,我無法使該列獨一無二。從上述函數獲取數據後,我只需使用合併函數將其插入表中。
entityManager.merge(entity);
現在的問題是,當多個用戶打在同一時間生成函數,它們分配相同的數據,這將導致duplicacy當數據被不同的客戶推到桌子上。我如何防止這種重複?
編輯..
1,我已經嘗試過在我的生成方法的Java synchronized關鍵字,它不工作,也許是因爲我使用了Spring的事務,我的服務層。
2,我不能使用數據庫序列來生成唯一的數據,數據必須來自生成方法。
java synchronized關鍵字不適用於我。也許是因爲我在使用spring事務服務。我已經編輯了我的原始問題以包含這條信息 –
您是否嘗試將整個生成方法保存在像這樣的同步塊中public int generateData(){synchronized {.....}} –
是的,我保留了整個生成方法在同步塊 –