Important

You are seeing the previous version of the new Alura experience we are preparing for you. Soon, it will get a brand-new visual identity designed to boost your studies!

Solved
(See solution)
1
reply

N+1 JPA

Deu pra perceber que, por estar utilizando o findall default do spring data, o hibernate está fazendo n+1 queries por para carregar os atributos do Topico (ex aluno e respostas), o spring habilita alguma opção para resolver isso ou deveríamos escrever a consulta na mão pra resolver esse problema?

1 reply
solution!

Oi Lucas,

Para não ter o problema do N+1 é necessário montar a querie na mão, utilizando o join fetch:

@Query("SELECT DISTINCT t FROM Topico t JOIN FETCH t.autor JOIN FETCH t.curso LEFT JOIN FETCH t.respostas")
Page<Topico> findAll(Pageable paginacao);

No exemplo anterior seria o caso de você precisar carregar o topico com todas as informações de uma vez.

Uma boa prática também é deixar os relacionamentos ManyToOne como LAZY, para evitar que eles sejam carregados quando não for necessário:

@Entity
public class Topico {

    @ManyToOne(fetch = FetchType.LAZY)
    private Usuario autor;

    @ManyToOne(fetch = FetchType.LAZY)
    private Curso curso;

Bons estudos!