İçeriğe geç

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.

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());
}

İlişkili veriyi döngüden önce JOIN FETCH veya entity graph ile tek sorguda yükleyin.