我需要验证唯一约束。假设我有这样的验证器:
class Validator {
Repository repository; // spring data jpa interface
boolean isUnique(Product p){
if(repository.exists(p))
return false;
}
}
class SomeService {
Repository repository; // spring data jpa interface
Validator v;
void save(Product p){
if(v.isUnique(p))
repository.save(p)
}
}
问题是:当具有相同参数的许多线程调用SomeService.save(Product p)方法时会发生什么?假设10个线程在isUnique()上返回true,然后10个线程正在保存我的实体。如果它对数据库有唯一约束,它会抛出异常吗?为了避免这种情况,我必须将锁定设置为悲观或同步代码?但是如果我对数据库层有这种约束,也许最好处理unique_constrain异常并从我的Validator中删除isUnique方法?你觉得怎么样?