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!