Evitando consulta lenta (ManyToOne) - countQuery
Atualizado
Atualizado
Devemos tomar cuidados para que a nossa consulta não fique ineficiente (olhando os logs SQL).
Ineficiente por sua vez, entenda lento. Em virtude do comportamento Lazy (carregar de forma tardia) os objetos, devemos citar o seguinte: enquanto a sessão JPA estiver ATIVA, o acesso a um objeto associado (uma simples consulta) pode provocar várias consultas ao banco (voltando nele várias vezes).
Você pode ler mais sobre aqui
Usaremos uma cláusula da JPQL chamada Join Fetch.
Ao invés de usar aquele findAll padrão de sempre, criaremos um novo método no Repository.
O Join Fetch basicamente, força o Join a buscar o Product com as categorias associadas (mesmo com a tabela de associação).
Mas a ideia é fazer corretamente com o Pageable, podemos passar ele também no searchAll (no controller/service).
A consulta é parecida, mas agora usamos countQuery (ele serve para dizer ao Spring, quantos elementos vamos buscar). Usa o count no Obj e não usa o Fetch.