乐观锁定失败;嵌套的异常是org.hibernate.StaleObjectStateException

时间:2020-05-20 13:11:11

标签: java hibernate jpa

我的Java应用程序中有两种不同的方法,每种方法都在同一张表upload_table上执行某些任务。请在下面找到通过两种不同方法执行的任务。

@Override
@Transactional(isolation = Isolation.SERIALIZABLE)
public void createClaimsFromNewUploadAndMarkUploadAsPending(Long uploadId) {
  try {
 ExcelClaimUpload claimUpload = excelClaimUploadRepository.findOne(uploadId);  // it will fetch records from upload_table
  if (claimUpload == null || !claimUpload.isNewUpload()) return;
  createPendingProcessingClaimsFrom(claimUpload);
  claimUpload.setStatus(PENDING);
  }catch(Exception e) {
  e.printStackTrace();
  }
}

上述任务将从同一张表upload_table中获取详细信息。

@Override
@Transactional
public ExcelClaimUpload createNewClaimUpload(ExcelClaimUpload claimUpload) {
 claimUpload.setStatus(NEW);
 List<UploadLineItem> uploadLineItems = claimUpload.getUploadLineItems();
 if(claimUpload.getUploadLineItems() != null && claimUpload.getUploadLineItems().size()==0) {
  claimUpLoad.setRowErrors(true);
 }
uploadLineItemService.save(uploadLineItems); // it will save the records in upload_table
claimUpLoad = excelClaimUploadRepository.save(claimUpload);
 }
return claimUpLoad;
}

上述任务会将记录保存到同一表upload_table中。

但是上述方法将由两个不同的线程(进程)触发。

在通过玉米作业执行这些任务时,有时会出现以下异常。

optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)

如何避免这种例外情况?

我尝试过使用@Transactional(isolation = Isolation.SERIALIZABLE),它将从表upload_table中获取记录,但是没有运气。

0 个答案:

没有答案
相关问题