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.
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:
@ManyToOne
conforme descreveu no video, o codigo também funciona sem o uso do @Param
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>