Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

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 resposta
solução!

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!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software