我想使用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 {.....}} –
是的,我保留了整个生成方法在同步块 –