Я пытаюсь сделать обновление, но данные не сохраняются, хотя я вижу, что запрос гибернации возвращает количество обновленных строк.
Это то, что я вижу в журналах для количества обновленных строк:
- обязательство START UPDATING для annuler
- обязательство DONE UPDATING для annuler: 3
- Номер аннулятора вовлечения 3
Однако это не то, что отражается в базе данных.
Я уже пытался создать другой класс с @Component и аннотироватьметод с @ Transactional.
Это основной класс
@Component
@Transactional
public class StatutEngagementJobAction extends GenericJobAction {
private boolean executeAction(Tenant tenant, DateTime deadline, BigDecimal abattement, Set<DateTime> legalDays) {
annulationEngagementNonRespecte();
}
public void annulationEngagementNonRespecte() {
LOGGER.info("STARTING annulation engagement ");
List<StatutEngagementDTO> annulations = new ArrayList<>();
List<String> engagementIdsToAnnuler = new ArrayList<>();
List<StatutEngagementDTO> allEngagementNonRespecteActif = engagementDAO.findAllEngagementNonRespecteActif();
for (StatutEngagementDTO engagementDTO : allEngagementNonRespecteActif) {
Engagement engagementNonRespect = engagementDAO.find(engagementDTO.getIdEngagement());
engagementIdsToAnnuler.add(engagementNonRespect.getIdEngagement());
annulations.add(engagementDTO);
if (CollectionUtils.isNotEmpty(engagementIdsToAnnuler)) {
int num = engagementDAO.updateEngagement(engagementIdsToAnnuler);
LOGGER.info("Number of engagement annuler {} ", num);
}
LOGGER.info("END annulation engagement ");
}
Этот метод вызывается для обновления и найден в другом классе
@Override
public int updateEngagement(List<String> engagementIdsToAnnuler){
LOGGER.info("START UPDATING engagement to annuler ");
String queryString =
"UPDATE Engagement " +
"SET etat = :etat , statut = :statut " +
"WHERE idEngagement IN :engagementIdsToAnnuler";
Query query = getFilteredCurrentSession().createQuery(queryString);
query.setParameter("etat", EngagementEtatType.ACTIF);
query.setParameter("statut", EngagementStatutType.NON_RESPECTE);
query.setParameterList("engagementIdsToAnnuler", engagementIdsToAnnuler);
int updatedEngagement = query.executeUpdate();
LOGGER.info("DONE UPDATING engagement to annuler: {} ", updatedEngagement);
return query.executeUpdate();
}
Запрос на обновление фактически работает.Однако данные по-прежнему не сохраняются. Факт: данные не сохраняются. Ожидается: данные должны быть сохранены в базе данных