在我的应用程序中,我有一个线程,该线程遍历数据库中的多行以为每一行生成一个文件,并更新每一行的status和generation_date列。
List<VBordereau> listBordereauAgenererData = bordereauDao.getListBordereauAgenere(IConstants.Status.VALID);
if (listBordereauAgenererData != null && !listBordereauAgenererData.isEmpty()) {
for (VBordereau vBordereau : listBordereauAgenererData) {
Bordereau bordereau = bordereauDao.findByID(Bordereau.class, vBordereau.getIdBord(), null);
bordereau.setFlagDispo(Boolean.FALSE);
bordereau.setUtilisateurLock(utilisateurDao.getUserByLogin(IConstants.LOGIN_USER_BATCH_DATA));
bordereauDao.saveOrUpdate(bordereau, null);
if(isKeyValid) {
prepareObjectData(vBordereau, deviseLocal, dateSession);
}
bordereau = bordereauDao.findByID(Bordereau.class,
vBordereau.getIdBord(), null);
bordereau.setUtilisateurLock(null);
bordereau.setFlagDispo(Boolean.TRUE);
bordereauDao.saveOrUpdate(bordereau, null);
}
}
在prepareObjectData方法中,我有一个方法可以从vBordereau对象生成文件,并且在文件生成后,我执行以下操作以更新每一行的列
Bordereau bord = bordereauDao.findByID(Bordereau.class, vbordereau.getIdBord(), null);
bord.setRefStatus(refStatusGen);
bord.setDateGenerationData(new Date());
bord.setNomFichierData(file.getName());
bordereauDao.saveOrUpdate(bord, null);
现在在99%的情况下一切正常,但在1%的情况下更新失败,将生成文件,否则即使认为数据库值没有问题,数据库中的数据也不会更改