Код: Выделить всё
@Transactional
private void mainMethod(Persisted entity,Param params){
List processList = new ArrayList();
for(Item item:params.getData().getItems()){
CompletableFuture process = produtosPedidoProcessor.asyncPersistance(entity,item);
processList.add(process);
}
CompletableFuture allProcesses = CompletableFuture.allOf(processList.toArray(new CompletableFuture[0]));
allProcesses.join();
}
Код: Выделить всё
@Async("someThreadPool")
public CompletableFuture asyncPersistance(Persisted entity,Item item){
//massive api call
someRepository.save(childEntity);
return CompletableFuture.completedFuture(null);
}
Проблема в том, что когда я сохраняю дочерний объект, он выдает мне ошибку внешнего ключа, например, основной объект не был сохранен.
Проблема в том, что когда я сохраняю дочерний объект, он выдает мне ошибку внешнего ключа, например, основной объект не был сохранен. p>
Как я могу обработать async + transcational в этом примере, чтобы устранить эту ошибку?
Что я пробовал:
Я удалил постоянство из потока и вернул завершенное будущее, содержащее неперсонифицированное состояние дочернего объекта, чтобы затем сохранить его в thenApply:
Код: Выделить всё
process.thenApply(result -> {
someRepository.save(childEntity);
return null;
}).exceptionally(
e->{
return null;
}
);
Подробнее здесь: https://stackoverflow.com/questions/793 ... tion-sprin