(A) perilaku sinkron panggilan Spring jpa dengan CompletableFutures [duplikat]

Sunting: Alasan untuk ini adalah cache tingkat 1 seperti yang dijelaskan di sini. Solusinya adalah dengan menyiram secara manual setelah penyimpanan.

Saya memiliki kode Java berikut:

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

Saya berharap, pemutar tersebut dimasukkan ke dalam database melalui playerRepository. Hanya setelah itu baris berikutnya dengan fungsi asinkron anonim dijalankan. Jadi pemain yang dimasukkan harus selalu dimasukkan dalam Daftar Pemain.

Namun tampaknya terkadang pemain tersebut tidak ada dalam daftar dan terkadang dia ada. Adakah yang bisa menjelaskan mengapa demikian? Atau apakah saya melakukan sesuatu yang salah? Terima kasih!


person Philipp    schedule 14.06.2021    source sumber