我正在尝试进行更新,但是虽然我看到休眠查询返回的是更新的行数,但是数据并没有持久化。
这是我在日志中看到的更新行数:
但是,这不是数据库中反映的内容。
我已经尝试使用@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();
}
更新查询实际上正在工作。但是数据仍然没有被保留 实际:数据未保留预期:数据应为 坚持到数据库