Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Filtrar resultados na consulta ou filtrar na lista (Boas práticas)

Boa tarde galera,

tenho uma duvida com relação a boas praticas com JPA que é o seguinte.

Digamos que eu tenho duas entidades Livro e Autor onde tenho um Autor que pode escrever vários livros, mas um livro só pode ser escrito por um Autor.

então no mapeamento fazemos algo do tipo:

class Autor {
    ...
    @OneToMany
    private List<Livro> livros;
}
class Livro {
    ....
    @ManyToOne
    private Autor autor;
}

Supomos que quero trazer todos os autores que tem livros publicados até a data X e tbm listar seus livros publicados até essa data.

Então na minha consulta eu poderia fazer algo do tipo:

from Autor a join fetch a.livros l where l.dataPublicacao = :dataPublicacao

Mas eu tbm poderia fazer o join fetch sem esse filtro e fazer na lista de livros. como algo do tipo:

livros.steam().filter(livro -> livro.getDataPublicacao().berofe(x)).collect(Collectors.toList())

Agora é que vem minha dúvida, qual seria a melhor prática, filtrar diretamente na consulta ou filtrar na lista?

Desde já agradeço as respostas.

2 respostas
solução!

Olá João Antônio, tudo bem? Peço desculpas pela demora no retorno! Bem, nessa situação depende, cada caso é um caso e tem suas particularidades, mais vejo que é mais interessante já fazer o filtro diretamente na consulta SQL ou JPQL, isso porque o banco de dados já está mais preparado para fazer esses filtros e com uma quantidade elevada de registros acho que essa busca feita diretamente pelo banco de dados seria mais ágil, fora que evitarmos ter que fazer um SELECT no banco de dados e depois fazer um Loop para pegar os dados que satisfazem a nossa condição, mesmo que em memória seja rápido, ainda vamos ter duas coisas, a consulta e depois o filtro, se passarmos essa responsabilidade para o banco de dados vamos ter apenas uma ação que é executar a consulta já filtrando os resultados.

Espero ter ajudado e bons estudos!

Muito obrigado pela resposta Jonilson, esclareceu bastante.