В моем приложении у меня есть поток, который перебирает несколько строк в базе данных, чтобы сгенерировать файл для каждой строки и обновить столбцы 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% обновление завершается неудачно, файл генерируется в противном случае, данные в базе данных не изменяются, даже если проблема со значениями базы данных не возникает