N+1 Sorgu (ARCH4050)
Anahtar java.orm.n-plus-one-query · Önem warning · Kategori orm
Bir koleksiyon üzerinde dönerken her eleman için ayrı sorgu çalıştırmak (N+1), tek seferde alınabilecek veriyi N+1 round-trip’e böler. İlişkili veriyi tek bir JOIN FETCH ile eager olarak çekin.
Hatalı
Bölüm başlığı “Hatalı”List<Order> orders = orderRepository.findAll();for (Order order : orders) { // Her sipariş için ayrı bir SELECT customer sorgusu System.out.println(order.getCustomer().getName());}@Query("SELECT o FROM Order o JOIN FETCH o.customer")List<Order> findAllWithCustomer();
List<Order> orders = orderRepository.findAllWithCustomer();for (Order order : orders) { System.out.println(order.getCustomer().getName());}Düzeltme
Bölüm başlığı “Düzeltme”İlişkili veriyi döngüden önce JOIN FETCH veya entity graph ile tek sorguda yükleyin.