Asenkron Bağlamda ORM Çağrısı (ARCH4043)
Anahtar java.async.jpa-session-in-async · Önem warning · Kategori async
Senkron bir JPA/ORM veritabanı çağrısı bir asenkron görev veya başlatılan thread içinde çalıştırıldığında thread’i bloklar ve genellikle thread’e bağlı EntityManager oturumuyla paylaşım sorunları yaratır.
Hatalı
Bölüm başlığı “Hatalı”CompletableFuture.runAsync(() -> { User u = entityManager.find(User.class, id); // bloklayan senkron ORM process(u);});CompletableFuture.supplyAsync(() -> { return repository.findById(id); // ayrılmış executor + scope'lu EM}, dbExecutor).thenAccept(this::process);Düzeltme
Bölüm başlığı “Düzeltme”Bloklayan ORM çağrılarını ayrılmış bir veritabanı executor’ında çalıştırın ve EntityManager’ı thread’ler arasında paylaşmayın.