Java · Intermediário · Português · Técnico
problema N+1
Armadilha de ORM em que uma consulta traz N entidades e depois cada uma dispara outra consulta para carregar uma relação, somando N+1 consultas.
Onde usar
Aparece quando uma listagem fica lenta; o log SQL do Hibernate mostra dezenas de selects iguais. Corrige-se com join fetch ou @EntityGraph.
Em código
// 1 select de pedidos + 1 por cliente
var ps = repo.findAll();
ps.forEach(p -> p.getCliente().getNome());
// solução: uma consulta com join fetch
@Query("select p from Pedido p "
+ "join fetch p.cliente")
List<Pedido> comCliente();Exemplos
A listagem está lenta por causa do problema N+1.
Resolvi o N+1 com um join fetch na consulta.
Cuidado
Trocar o fetch para EAGER não resolve e pode piorar; resolva na consulta, com join fetch.
Sinônimos
N+1 selects