我想用悲观写来锁定行。但是下面的代码没有给出任何异常,而且行值也不会更新。
请有人帮我解决这个问题。
请注意:
一。任何更改整个数据库隔离级别的解决方案都没有帮助,因为它会影响应用程序中的其他流。
@Override
@Transactional
public Boolean updateRecords(Long jobTrackerId, Long processedRecords, Long erredRecords) {
try{
JobTracker jobTracker = getEntityManager(true).find(JobTracker.class, jobTrackerId);
getEntityManager(true).lock(jobTracker, LockModeType.PESSIMISTIC_WRITE);
if(jobTracker == null){
return false;
}
if(processedRecords!=null){
jobTracker.setProcessedRecords(processedRecords);
}
if(erredRecords!=null){
jobTracker.setErredRecords(erredRecords);
}
if(jobTracker.getErredRecords() != null && jobTracker.getProcessedRecords() != null && jobTracker.getTotalRecords() != null){
if(jobTracker.getErredRecords() + jobTracker.getProcessedRecords() == jobTracker.getTotalRecords()){
jobTracker.setStatus("Completed");
}else if(jobTracker.getErredRecords() + jobTracker.getProcessedRecords() > jobTracker.getTotalRecords()){
jobTracker.setStatus("Erred");
}
}
getEntityManager(true).merge(jobTracker);
return true;
}catch(PersistenceException e){
logger.error("For job id:" + jobTrackerId + " Exception while updating the jobTracker records data", e);
return false;
}catch (Exception e){
logger.error("For job id:" + jobTrackerId + "Generic Exception while updating the jobTracker records data",e);
return false;
}
}