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 aprendimos en aula en el aula:

@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
@JoinColumn(name = "serie_id")
private Serie serie;

public Episodio() {}

public Episodio(Integer numero, DatosEpisodio d) {
    this.temporada = numero;
    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 void setSerie(Serie serie) {
    this.serie = serie;
}

}

@Entity
@Table(name = "series")
public class Serie {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String titulo;
private String genero;
private Integer totalTemporadas;
private Double evaluacion;

@OneToMany(
    mappedBy = "serie",
    cascade = CascadeType.ALL,
    orphanRemoval = true
)
private List<Episodio> episodios = new ArrayList<>();


public void addEpisodio(Episodio episodio) {
    episodios.add(episodio);
    episodio.setSerie(this);
}

public void removeEpisodio(Episodio episodio) {
    episodios.remove(episodio);
    episodio.setSerie(null);
}

}

private void buscarEpisodioPorSerie() {
listarSeriesBuscadas();
System.out.println("Escriba el nombre de la serie que desea ver");
var nombreSerie = teclado.nextLine();

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

if (serieOpt.isPresent()) {
    var serieBuscada = serieOpt.get();

    for (int i = 1; i <= serieBuscada.getTotalTemporadas(); i++) {
        var json = consumoApi.obtenerDatos(
            URL_BASE + serieBuscada.getTitulo().replace(" ", "+")
            + "&season=" + i + API_KEY
        );

        DatosTemporada datosTemporada =
            conversor.obtenerDatos(json, DatosTemporada.class);

        datosTemporada.episodios().forEach(d -> {
            Episodio episodio = new Episodio(i, d);
            serieBuscada.addEpisodio(episodio);
        });
    }

    repository.save(serieBuscada);
    System.out.println("Episodios guardados correctamente");
}

}

1 respuesta

Hola Alexis, espero que estés bien

Parece que estás trabajando en un proyecto donde estás relacionando series con episodios usando Spring Data JPA. Ya has definido las entidades Episodio y Serie y parece que has mapeado correctamente la relación bidireccional entre ellas.

Para asegurarte de que los episodios se guarden correctamente como entidades en tu base de datos, aquí hay algunos puntos que podrías verificar:

  1. Configuración de la Base de Datos: Asegúrate de que tu base de datos esté configurada correctamente en tu aplicación Spring. Esto incluye el archivo application.properties o application.yml donde defines las propiedades de conexión.

  2. Repositorio JPA: Aunque no lo has mencionado en tu código, asegúrate de tener un repositorio para la entidad Serie que extienda JpaRepository o CrudRepository. Esto te permitirá realizar operaciones CRUD sobre tus entidades.

    public interface SerieRepository extends JpaRepository<Serie, Long> {}
    
  3. Persistencia de Datos: Cuando llamas a repository.save(serieBuscada);, estás intentando guardar la entidad Serie junto con sus episodios. Asegúrate de que el cascade = CascadeType.ALL esté configurado correctamente en la relación @OneToMany para que los episodios se guarden automáticamente cuando guardes una serie.

  4. Verificación de Datos: Después de guardar, puedes verificar si los datos se han persistido correctamente consultando la base de datos directamente o usando el repositorio para buscar las series y sus episodios.

  5. Manejo de Excepciones: Considera manejar posibles excepciones que puedan surgir durante el proceso de persistencia, como problemas de conexión a la base de datos o errores de validación.

Si ya has cubierto estos puntos y sigues teniendo problemas, podrías revisar los logs de la aplicación para obtener más detalles sobre cualquier error que pueda estar ocurriendo.

Espero que estas sugerencias te sean útiles y que puedas avanzar en tu proyecto. ¡Bons estudios!