Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

haga lo que hicimos

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

    List<Serie> findTop5ByOrderByEvaluacionDesc();
    List<Serie> findByGenero(Categoria categoria);
    //List<Serie> findByTotalTemporadasLessThanEqualAndEvaluacionGreaterThanEqual(int totalTemporadas, Double evaluacion);

    @Query("SELECT s FROM Serie s WHERE s.totalTemporadas <= :totalTemporadas AND s.evaluacion >= :evaluacion")
    List<Serie> seriesPorTemparadaYEvaluacion(int totalTemporadas, Double evaluacion);

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

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

¡Hola Justin!

Parece que estás trabajando con un repositorio de Spring Data JPA para manejar datos relacionados con series y episodios. Vamos a revisar tu código y ver si hay algo que pueda mejorarse o si hay algo que no está funcionando como esperabas.

  1. Uso de @Query con LIMIT: En la consulta top5Episodios, estás utilizando LIMIT 5 dentro de una consulta JPQL. Desafortunadamente, JPQL no soporta directamente la cláusula LIMIT. En su lugar, puedes manejar la paginación usando el objeto Pageable de Spring Data JPA. Aquí tienes un ejemplo de cómo podrías hacerlo:

    @Query("SELECT e FROM Serie s JOIN s.episodios e WHERE s = :serie ORDER BY e.evaluacion DESC")
    List<Episodio> top5Episodios(Serie serie, Pageable pageable);
    

    Y luego, al llamar a este método, puedes pasar un PageRequest:

    Pageable topFive = PageRequest.of(0, 5);
    List<Episodio> episodios = serieRepository.top5Episodios(serie, topFive);
    
  2. Uso de ILIKE: La función ILIKE no es parte del estándar JPQL. Si estás buscando una coincidencia sin distinción de mayúsculas, puedes usar LIKE combinado con funciones de cadena para convertir a minúsculas, o simplemente usar métodos de Spring Data JPA que ya manejan esto, como findByTituloContainsIgnoreCase.

  3. Consultas personalizadas: Veo que ya estás usando consultas personalizadas con @Query. Esto es útil cuando necesitas realizar consultas más complejas que no están cubiertas por los métodos de consulta derivados de Spring Data JPA.

Espero que estas sugerencias te sean útiles. ¡Espero haber ayudado y buenos estudios!