Sobes.tech
Junior — Middle

Que abordagens utilizou para eliminar o problema de múltiplas consultas (N+1) no Hibernate e como as implementou?

sobes.tech IA

Resposta da IA

O problema N+1 no Hibernate ocorre quando, ao carregar uma coleção de entidades, uma consulta separada é executada para cada uma delas, o que reduz significativamente o desempenho.

As principais abordagens para resolver este problema:

  1. Uso de JOIN FETCH em JPQL/HQL — permite carregar entidades relacionadas numa única consulta usando join.
String hql = "SELECT p FROM Parent p JOIN FETCH p.children";
List<Parent> parents = session.createQuery(hql, Parent.class).getResultList();
  1. Entity Graphs — método declarativo para indicar quais ligações devem ser carregadas imediatamente.

  2. FetchType.EAGER — carregamento ansioso, mas deve ser usado com cuidado para não carregar dados desnecessários sempre.

  3. Batch fetching — configuração do Hibernate para carregar entidades relacionadas em lotes, reduzindo o número de consultas.

  4. Uso de @Fetch(FetchMode.SUBSELECT) — Hibernate carrega coleções com uma consulta adicional usando um subselect.

A escolha do método depende da situação específica e dos requisitos de desempenho.