Simplesmente nao funciona pra mim, no exemplo abaixo esta sem os ':' antes de series porque com eles nao retorna nada, e sem eles retorna as top 5 series do banco todo nao da serie selecionada.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Simplesmente nao funciona pra mim, no exemplo abaixo esta sem os ':' antes de series porque com eles nao retorna nada, e sem eles retorna as top 5 series do banco todo nao da serie selecionada.
Olá, Matheus! Como vai?
Parece que o problema está relacionado ao uso dos parâmetros na sua consulta JPQL. Quando você utiliza :serie, está indicando que é um parâmetro que deve ser passado para a consulta. Vamos corrigir isso:
Certifique-se de que o parâmetro está sendo passado corretamente: Na chamada do método top5EpisodesBySerie, você deve passar o objeto Series que deseja usar na consulta.
Verifique a anotação @Query: A consulta deve estar corretamente formatada. Certifique-se de que está assim:
@Query("SELECT e FROM Serie s JOIN s.episodios e WHERE s = :serie ORDER BY e.avaliacao DESC")
List<Episodio> top5EpisodiosPorSerie(@Param("serie") Serie serie);
Cheque o método de chamada: Na sua classe principal, onde você chama esse método, certifique-se de que está passando a série correta:
List<Episodio> topEpisodios = repositorio.top5EpisodiosPorSerie(serie);
Verifique o uso do LIMIT: O LIMIT não é suportado diretamente em JPQL. Para limitar os resultados, você pode usar o método Pageable do Spring Data JPA:
@Query("SELECT e FROM Serie s JOIN s.episodios e WHERE s = :serie ORDER BY e.avaliacao DESC")
List<Episodio> top5EpisodiosPorSerie(@Param("serie") Serie serie, Pageable pageable);
E ao chamar o método:
Pageable topFive = PageRequest.of(0, 5);
List<Episodio> topEpisodios = repositorio.top5EpisodiosPorSerie(serie, topFive);
Espero que essas dicas ajudem a resolver o problema! Mas caso não resolvam, peço que compartilhe todo o seu projeto para que eu possa testar outras possibilidades. Recomendo que faça isso usando o GitHub.
Bons estudos!
Se, mesmo após aplicar a dica dada, vale checar:
@OneToMany(mappedBy = "serie", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
Episódio:
@ManyToOneconforme descreveu no video, o codigo também funciona sem o uso do @Param
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>