У меня есть один метод с двумя другими методами: один для сохранения сущности в базе данных и один для обновления нескольких строк в одной таблице.Эти 2 метода помечены @Transactional в сервисах.Также основной метод, который содержит их оба, аннотирован @Transactional распространением REQUIRES_NEW.Проблема заключается в том, что если второй метод, который обновляет некоторые записи, завершился неудачей, метод save ранее не откатывается.Я хочу выполнить откат, если один из двух методов не работает.
Main method:
@Transactional(propagation = Propagation.REQUIRES_NEW)
protected void updateFailedImsisForDelete(Date currentDate, Collection<Nto7433> failedGscsAtDelete) {
Set<WmFailedDevice> failedDevices = new HashSet<>();
WmFailedBatch wmFailedBatch = new WmFailedBatch(currentDate, BatchOperationType.DELETE);
for (Nto7433 gsc : failedGscsAtDelete) {
failedDevices.add(new WmFailedDevice(gsc.getIpAddress(), wmFailedBatch));
}
wmFailedBatch.setFailedDevices(failedDevices);
WmFailedBatch returnedWmFailedBatch = wmFailedBatchService.save(wmFailedBatch);
wmPushedImsiService.updateFailedDeleteImsisBatch(returnedWmFailedBatch.getId(), currentDate);
}
Save method:
@Override
@Transactional(propagation = Propagation.REQUIRED)
public WmFailedBatch save(WmFailedBatch wmFailedBatch) {
return wmFailedBatchRepository.save(wmFailedBatch);
}
Update method:
@Query(value = "update TABLE wm_pushed_imsi set faileddeletebatchid = :batchid where expiredate < :expiredate and faileddeletebatchid is NULL ", nativeQuery = true)
@Modifying
void updateFailedDeleteImsisBatch(@Param("batchid") Long batchFailedDeleteId, @Param("expiredate") Date currentDate);
@Override
@Transactional(propagation = Propagation.REQUIRED)
public void updateFailedDeleteImsisBatch(Long batchFailedDeleteId, Date currentDate) {
wmPushedImsiRepository.updateFailedDeleteImsisBatch(batchFailedDeleteId, currentDate);
}
Так что в updateFailedImsisForDelete, если updateFailedDeleteImsisBatch не выполняется, сохранение перед выполнено, но я хочу откат