(A) синхронное поведение вызовов Spring jpa с CompletableFutures

Изменить: причиной этого является кеш 1-го уровня, как описано здесь. Решением будет ручная промывка после сохранения.

У меня есть следующий код Java:

Player updatedPlayer = playerRepository.save(player);
CompletableFuture.runAsync(() -> {
    List<Player> players = playerRepository.findAllByToolId(updatedPlayer.getToolId());
    // Do something with players that takes some time
});

Я ожидал, что плеер вставляется в базу данных через playerRepository. Только после этого выполняются следующие строки с анонимной асинхронной функцией. Таким образом, вставленный игрок всегда должен быть включен в список игроков.

Но похоже дело в том, что иногда игрока нет в списке, а иногда он есть. Кто-нибудь может объяснить, почему это так? Или я что-то не так делаю? Спасибо!


person Philipp    schedule 14.06.2021    source источник