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

[Dúvida] Dúvida na derived query findTop5ByOrderByEpisodiosDataLancamentoDesc

Olá, pessoal!

Eu fiquei com dúvida na derived querie para os lançamentos implementada na aula, onde o nome do método ficou findTop5ByOrderByEpisodiosDataLancamentoDesc(). Pelo que entendi, estamos pedindo para que seja feita uma busca na classe Serie em cada item de List<Episodio> episodios e, por sua vez, percorrendo cada episódio através do atributo dataLancamento, correto?

O que queremos da funcionalidade é que, para o primeiro episódio lançado, pegue a data de lançamento e compare com as outras datas de lançamento dos primeiros episódios das demais séries e apresente os mais recentes. Se for isso, como que essa derived querie entende que seria desta forma? Em minha primeira impressão, parece que está percorrendo toda a lista de episódio e, se for isso, ela pega a data de qual?

Não ficou muito claro para mim como que ela funciona e gostaria de entender mais sobre. É como se estivéssemos pedindo para pegar o dataLancamento da List<Episodio> episodios e não verificar a data do primeiro episódio para, então, averiguar qual a que teria de lançamento mais recente.

ATUALIZAÇÃO

Após essa postagem, eu li o texto que fala mais sobre na próxima atividade. Pelo que consegui entender, a derived querie, de fato, percorria todos os episódios de todas as séries e, com base na data de lançamento, iria montando o top 5. Ou seja, o trabalho de busca foi focado, basicamente, na tabela episodios e feito o top 5 de todos os episódios da base. Por isso, poderia ter mais de 1 episódio de uma mesma série neste ranking e, quando o retorno era dado ao front, aparecia, dependendo da base de séries no banco de dados, menos que 5. Como indicação de ajuste, foi proposto fazer uma JPQL:

@Query("SELECT s FROM Serie s " +
            "JOIN s.episodios e " +
            "GROUP BY s " +
            "ORDER BY MAX(e.dataLancamento) DESC LIMIT 5")
    List<Serie> encontrarEpisodiosMaisRecentes();

Então, se tivéssemos um EpisodioRepository uma derived querie que iria fazer uma busca semelhante seria findTop5ByOrderByDataLancamentoDesc, correto?

2 respostas
solução!

Oii, tudo bem?

A sua percepção tá correta. A derived query percorre todos os episódios de todas as séries e, com base na data de lançamento, vai montando o top 5. Então, pode acontecer de ter mais de um episódio de uma mesma série neste ranking.

A JPQL que você mencionou é uma alternativa para ajustar essa situação. Ela busca as séries cujos episódios têm as datas de lançamento mais recentes, mas agrupa por série, garantindo que cada série apareça apenas uma vez no resultado.

Quando você menciona findTop5ByOrderByDataLancamentoDesc em um possível EpisodioRepository, isso retornaria os 5 episódios mais recentes, independentemente da série a que pertencem.

Um abraço e bons estudos.

Lorena,

Certo, muito obrigado pelo esclarecimento.