Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Erro no case 10

Olá! Estou codando o case 10 para buscar e listar os 5 eps mais avaliados de cada série, porém, ele não compila. Abaixo, coloquei apenas os trechos referentes a essa opção do menu construída.

Episodio.java

package br.com.alura.screenMatch.model;

import...

@Entity
@Table(name = "episodios")
public class Episodio {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Integer temporada;
    private String titulo;
    private Integer numeroEp;
    private Double avaliacaoEp;
    private LocalDate dataLancamento;
    private String duracaoEP;
    private String diretorEp;
    private String generoEp;
    @ManyToOne
    private Serie serie;
}

SerieRepository.java

package br.com.alura.screenMatch.repository;

import...

public interface SerieRepository extends JpaRepository<Serie, Long> {
    Optional<Serie> findByTituloContainingIgnoreCase(String nomeSerie);

    List<Serie> findByAtoresContainingIgnoreCaseAndAvaliacaoGreaterThanEqual(String nomeAtor, Double avaliacao);

    List<Serie> findTop5ByOrderByAvaliacaoDesc();

    List<Serie> findByGenero(Categoria categoria);

    List<Serie> findByTotalTemporadasLessThanEqualAndAvaliacaoGreaterThanEqual(int totalTemporadas, double avaliacao);

    @Query("SELECT s FROM Serie s WHERE s.totalTemporadas >= :totalTemporadas AND s.avaliacao >= :avaliacao")
    List<Serie> seriePorTemporadaEAvaliacao(int totalTemporadas, double avaliacao);

    @Query("SELECT e FROM Serie s JOIN s.episodios e WHERE e.titulo ILIKE %:nomeTrechoEp%")
    List<Episodio> episodiosPorTrecho(String nomeTrechoEp);

    @Query("SELECT s FROM Serie s JOIN s.episodios e WHERE s = :serie ORDER BY e.avaliacaoEp DESC LIMIT 5")
    List<Episodio> topEpisodiosPorSerie(Serie serie);
}

Principal.java

package br.com.alura.screenMatch.principal;

import...

public class Principal {

    private void topEpisodiosPorSerie() {
        buscarSeriePorTitulo();
        if (serieBusca.isPresent()) {
            Serie serie = serieBusca.get();
            List<Episodio> todosEpisodios = repositorio.topEpisodiosPorSerie(serie);
            todosEpisodios.forEach(e ->
                    System.out.printf("Série: %s - Temporada %s - Episódio %s - Avaliação: %.1f\n",
                            e.getSerie().getTitulo(), e.getTemporada(),
                            e.getNumeroEp(), e.getAvaliacaoEp()));
        } else {
            System.out.println("Série não encontrada!");
        }
    }

}

Erro apresentado Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Achei o erro! Estava colocando o s no SELECT e

@Query("SELECT **s** FROM Serie s JOIN s.episodios e WHERE s = :serie ORDER BY e.avaliacaoEp DESC LIMIT 5") List<Episodio> topEpisodiosPorSerie(Serie serie);