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?