Olá, Luís!
Sobre sua última dúvida, o erro java.lang.UnsupportedOperationException
pode estar acontecendo porque o Spring Data JPA não suporta algumas operações específicas quando utilizamos JPQL/HQL com GROUP BY
diretamente.
Se na aula a professora usou um alias para o GROUP BY "geral", provavelmente está usando uma projeção ou DTO para mapear os resultados. No seu caso, parece que a consulta não está sendo interpretada corretamente pelo Spring Data JPA.
Para resolver isso, você pode testar duas abordagens:
- Usar uma consulta nativa no repositório:Se o native query já resolveu, você pode usá-lo diretamente no
@Query
, garantindo compatibilidade com o banco.
@Query(value = "SELECT s.id, s.titulo, s.genero, s.atores, s.avaliacao, s.poster, s.sinopse, s.total_temporadas
FROM serie s
JOIN episodio e ON s.id = e.serie_id
GROUP BY s.id, s.titulo, s.genero, s.atores, s.avaliacao, s.poster, s.sinopse, s.total_temporadas
ORDER BY MAX(e.data_lancamento) DESC
FETCH FIRST 10 ROWS ONLY",
nativeQuery = true)
List<Object[]> buscarSeriesComEpisodios();
- Criar um DTO para projeção personalizada:Se quiser manter o JPQL, pode criar um DTO específico para capturar os resultados corretamente:
public record SerieDTO(Long id, String titulo, String genero, String atores, Double avaliacao, String poster, String sinopse, Integer totalTemporadas) {}
@Query("SELECT new br.com.alura.screenmatch.dto.SerieDTO(s.id, s.titulo, s.genero, s.atores, s.avaliacao, s.poster, s.sinopse, s.totalTemporadas)
FROM Serie s
JOIN s.episodios e
GROUP BY s.id, s.titulo, s.genero, s.atores, s.avaliacao, s.poster, s.sinopse, s.totalTemporadas
ORDER BY MAX(e.dataLancamento) DESC")
List<SerieDTO> buscarSeriesComEpisodios();
Isso evita o erro UnsupportedOperationException
, já que o Spring JPA não precisa interpretar os resultados de forma inconsistente.
Se ainda não funcionar, verifique se sua entidade Serie
tem a relação corretamente mapeada com @OneToMany
e se episodios
está declarado como uma Collection (List<Episodio>
).
Fico à disposição. Abraços e bons estudos!