Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
3
respuestas

no me agrega los episodios a la tabla de postgres PG4admin no se donde esta el error ...???

hola a todos tengo un problema con mi PG4admin no me carga los episodios .... me carga las series pero no los episodios ...**episodio.java **

package com.aluracursos.screenmatch.model;

import jakarta.persistence.*;

import java.time.LocalDate; import java.time.format.DateTimeParseException; @Entity @Table(name = "episodios") public class Episodio { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long Id; private Integer temporada; private String titulo; private Integer numeroEpisodio; private Double evaluacion; private LocalDate fechaDeLanzamiento; @ManyToOne private Serie serie;

public Episodio(){}

public Episodio(Integer temporada, DatosEpisodio d) {
    this.temporada = temporada;
    this.titulo = d.titulo();
    this.numeroEpisodio = d.numeroEpisodio();
    try{
        this.evaluacion = Double.valueOf(d.evaluacion());
    }catch (NumberFormatException e){
        this.evaluacion = 0.0;
    }
    try{
        this.fechaDeLanzamiento = LocalDate.parse(d.fechaDeLanzamiento());
    } catch (DateTimeParseException e){
        this.fechaDeLanzamiento = null;
    }

}

public Serie getSerie() {
    return serie;
}

public void setSerie(Serie serie) {
    this.serie = serie;
}

public Integer getTemporada() {
    return temporada;
}

public void setTemporada(Integer temporada) {
    this.temporada = temporada;
}

public String getTitulo() {
    return titulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public Integer getNumeroEpisodio() {
    return numeroEpisodio;
}

public void setNumeroEpisodio(Integer numeroEpisodio) {
    this.numeroEpisodio = numeroEpisodio;
}

public Double getEvaluacion() {
    return evaluacion;
}

public void setEvaluacion(Double evaluacion) {
    this.evaluacion = evaluacion;
}

public LocalDate getFechaDeLanzamiento() {
    return fechaDeLanzamiento;
}

public void setFechaDeLanzamiento(LocalDate fechaDeLanzamiento) {
    this.fechaDeLanzamiento = fechaDeLanzamiento;
}

@Override
public String toString() {
    return
            "temporada=" + temporada +
            ", titulo='" + titulo + '\'' +
            ", numeroEpisodio=" + numeroEpisodio +
            ", evaluacion=" + evaluacion +
            ", fechaDeLanzamiento=" + fechaDeLanzamiento;
}

}

3 respuestas

serie.java

package com.aluracursos.screenmatch.model;

import jakarta.persistence.*;

import java.util.List; import java.util.OptionalDouble;

@Entity @Table(name = "series") public class Serie { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long Id; @Column(unique = true) private String titulo; private Integer totalTemporadas; private Double evaluacion; private String poster; @Enumerated(EnumType.STRING) private Categoria genero; private String actores; private String sinopsis; @OneToMany(mappedBy = "serie", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List episodios;

public Serie(){}

public Serie(DatosSerie datosSerie){
    this.titulo = datosSerie.titulo();
    this.totalTemporadas = datosSerie.totalTemporadas();
    this.evaluacion = OptionalDouble.of(Double.valueOf(datosSerie.evaluacion())).orElse(0);
    this.poster = datosSerie.poster();
    this.genero = Categoria.fromString(datosSerie.genero().split(",")[0].trim());
    this.actores = datosSerie.actores();
    this.sinopsis = datosSerie.sinopsis();
}

@Override
public String toString() {
    return  "genero=" + genero +
            "titulo='" + titulo + '\'' +
            ", totalTemporadas=" + totalTemporadas +
            ", evaluacion=" + evaluacion +
            ", poster='" + poster + '\'' +
            ", actores='" + actores + '\'' +
            ", sinopsis='" + sinopsis + '\'' +
            ", episodios='" + episodios + '\'';

}

public List<Episodio> getEpisodios() {
    return episodios;
}

public void setEpisodios(List<Episodio> episodios) {
    episodios.forEach(e -> e.setSerie(this));
    this.episodios = episodios;
}

public Long getId() {
    return Id;
}

public void setId(Long id) {
    Id = id;
}

public String getTitulo() {
    return titulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public Integer getTotalTemporadas() {
    return totalTemporadas;
}

public void setTotalTemporadas(Integer totalTemporadas) {
    this.totalTemporadas = totalTemporadas;
}

public Double getEvaluacion() {
    return evaluacion;
}

public void setEvaluacion(Double evaluacion) {
    this.evaluacion = evaluacion;
}

public String getPoster() {
    return poster;
}

public void setPoster(String poster) {
    this.poster = poster;
}

public Categoria getGenero() {
    return genero;
}

public void setGenero(Categoria genero) {
    this.genero = genero;
}

public String getActores() {
    return actores;
}

public void setActores(String actores) {
    this.actores = actores;
}

public String getSinopsis() {
    return sinopsis;
}

public void setSinopsis(String sinopsis) {
    this.sinopsis = sinopsis;
}

}

principal.java

      omision   var menu &
      omision switch cases 1-9:
      omite private DatosSerie getDatosSerie() {}
 
private void buscarEpisodioPorSerie() {
    mostrarSeriesBuscadas();
    System.out.println("Escribe el nombre de la serie de la cual quieres ver los episodios");
    var nombreSerie = teclado.nextLine();

    Optional<Serie> serie = series.stream()
            .filter(s -> s.getTitulo().toLowerCase().contains(nombreSerie.toLowerCase()))
            .findFirst();

    if(serie.isPresent()){
        var serieEncontrada = serie.get();
        List<DatosTemporadas> temporadas = new ArrayList<>();

        for (int i = 1; i <= serieEncontrada.getTotalTemporadas(); i++) {
            var json = consumoApi.obtenerDatos(URL_BASE + serieEncontrada.getTitulo().replace(" ", "+") + "&season=" + i + API_KEY);
            DatosTemporadas datosTemporada = conversor.obtenerDatos(json, DatosTemporadas.class);
            temporadas.add(datosTemporada);
        }
        temporadas.forEach(System.out::println);

        List<Episodio> episodios = temporadas.stream()
                .flatMap(d -> d.episodios().stream()
                        .map(e -> new Episodio(d.numero(), e)))
                .collect(Collectors.toList());

        serieEncontrada.setEpisodios(episodios);
        repositorio.save(serieEncontrada);
    }



}
private void buscarSerieWeb() {
    DatosSerie datos = getDatosSerie();
    Serie serie = new Serie(datos);
    repositorio.save(serie);
    //datosSeries.add(datos);
    System.out.println(datos);
}

private void mostrarSeriesBuscadas() {
    series = repositorio.findAll();

    series.stream()
            .sorted(Comparator.comparing(Serie::getGenero))
            .forEach(System.out::println);
}

private void buscarSeriesPorTitulo(){
    System.out.println("Escribe el nombre de la serie que deseas buscar");
    var nombreSerie = teclado.nextLine();
    serieBuscada = repositorio.findByTituloContainsIgnoreCase(nombreSerie);

    if(serieBuscada.isPresent()){
        System.out.println("La serie buscada es: " + serieBuscada.get());
    } else {
        System.out.println("Serie no encontrada");
    }

}
private void buscarTop5Series(){
    List<Serie> topSeries = repositorio.findTop5ByOrderByEvaluacionDesc();
    topSeries.forEach(s ->
            System.out.println("Serie: " + s.getTitulo() + " Evaluacion: " + s.getEvaluacion()) );
}

private void buscarSeriesPorCategoria(){ System.out.println("Escriba el genero/categoría de la serie que desea buscar"); var genero = teclado.nextLine(); var categoria = Categoria.fromEspanol(genero); List seriesPorCategoria = repositorio.findByGenero(categoria); System.out.println("Las series de la categoría " + genero); seriesPorCategoria.forEach(System.out::println); } public void filtrarSeriesPorTemporadaYEvaluacion(){ System.out.println("¿Filtrar séries con cuántas temporadas? "); var totalTemporadas = teclado.nextInt(); teclado.nextLine(); System.out.println("¿Com evaluación apartir de cuál valor? "); var evaluacion = teclado.nextDouble(); teclado.nextLine(); List filtroSeries = repositorio.seriesPorTemparadaYEvaluacion(totalTemporadas,evaluacion); System.out.println("*** Series filtradas ***"); filtroSeries.forEach(s -> System.out.println(s.getTitulo() + " - evaluacion: " + s.getEvaluacion())); } private void buscarEpisodiosPorTitulo(){ System.out.println("Escribe el nombre del episodio que deseas buscar"); var nombreEpisodio = teclado.nextLine(); List episodiosEncontrados = repositorio.episodiosPorNombre(nombreEpisodio); episodiosEncontrados.forEach(e -> System.out.printf("Serie: %s Temporada %s Episodio %s Evaluación %s\n", e.getSerie().getTitulo(), e.getTemporada(), e.getNumeroEpisodio(), e.getEvaluacion())); } private void buscarTop5Episodios(){ buscarSeriesPorTitulo(); if(serieBuscada.isPresent()){ Serie serie = serieBuscada.get(); List topEpisodios = repositorio.top5Episodios(serie); topEpisodios.forEach(e -> System.out.printf("Serie: %s - Temporada %s - Episodio %s - Evaluación %s\n", e.getSerie().getTitulo(), e.getTemporada(), e.getTitulo(), e.getEvaluacion()));

    }
}

}

¡Hola Maikol!

Entiendo que estás teniendo problemas para agregar los episodios a la tabla de PostgreSQL a través de PG4admin. Revisando el código que has compartido, parece que estás utilizando la anotación @ManyToOne en la clase Episodio para establecer la relación con la clase Serie. Sin embargo, es importante asegurarse de que la configuración de la relación esté correctamente mapeada en tu base de datos y en tu aplicación.

Algunas posibles causas para que los episodios no se estén agregando a la tabla podrían ser:

  1. Problemas en la configuración de las relaciones entre las entidades en tu base de datos.
  2. Errores en la lógica de persistencia de los episodios en tu aplicación.

Te recomendaría revisar detenidamente la configuración de las relaciones en tu base de datos y asegurarte de que esté alineada con las anotaciones que has utilizado en tus entidades. Además, verifica que estés persistiendo los episodios de manera correcta en tu código.

Si necesitas más ayuda, no dudes en compartir más detalles sobre la configuración de tu base de datos o el código relacionado con la persistencia de los episodios.

Espero que esta información te sea útil para solucionar tu problema. ¡Mucho ánimo con tu proyecto final!

Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!