Hola. Estoy teniendo muchos problemas con el desafío. Paso mi código completo si alguien me puede apoyar. Concretamente, son dos problemas: 1) Me arma mal las tablas en posgres, porque no pone los autores en la tabla libro. 2) No me convierte bien el json porque no sé como colocar una lista de idiomas en la tabla Libro, de forma que se me genera una inconsistencia, lo que, entiendo, me da este ultimo fallo, ya que antes no lo hacia. Muchas gracias, Francisco.. CLASE PRINCIPAL public class Principal { private ConsumoAPI consumo = new ConsumoAPI();
private Conversor conversor = new Conversor();
private Scanner teclado = new Scanner(System.in);
private final String URL_BASE = "https://gutendex.com/books/";
public void MuestraElMenu() {
var opcion = -1;
while (opcion != 0) {
var menu = """
1. Buscar libros por título
2. Listar libros registrados
3. Listar autores registrados
4. Listar autores vivos en un año
5. Listar libros por idioma
""";
System.out.println(menu);
opcion = teclado.nextInt();
teclado.nextLine();
switch (opcion) {
case 1:
mostrarDatosLibro();
break;
case 2:
//MostrarLibros();
break;
}
}
}
private void mostrarDatosLibro() {
System.out.println("Ingrese el libro que desea buscar");
var NombreLibro = teclado.nextLine();
try {
var json = consumo.obtenerDatos(URL_BASE + "?search=" + NombreLibro.replace(" ", "+"));
Datos datosBusqueda = conversor.convierteDatos(json, Datos.class);
List<Libro> listaLibros = new ArrayList<>();
for (DatosLibro datosLibro : datosBusqueda.libros()) {
Libro libro = new Libro(datosLibro);
listaLibros.add(libro);
}
System.out.println(listaLibros.getFirst().toString());
} catch (Exception e) {
System.out.println("Error al convertir los libros");
}
}
} CLASE LIBRO public class Libro { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long Id; @Column(unique = true) private String titulo;
@OneToMany(mappedBy = "libros", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Autor> autores;
private String idiomas;
private Double numeroDeDescargas;
public Libro(DatosLibro datosLibro) {
this.titulo = datosLibro.titulo();
this.autores = datosLibro.autor();
this.numeroDeDescargas = datosLibro.numeroDeDescargas();
this.idiomas = datosLibro.idiomas();
}
public Libro() {
}
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
public String toString() {
String nombreAutor = autores.get(0).getNombre();
System.out.println("********LIBRO******************");
return "Titulo: " + titulo + "\n" +
"Autor/es: " + nombreAutor + "\n" +
"Idioma: " + idiomas + "\n" +
"Número de descargas: " + numeroDeDescargas;
}
} CLASE AUTOR @Entity @Table(name = "autores") public class Autor { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long Id;
private String nombre;
private int añoNacimiento;
private int añoMuerte;
@ManyToOne
private Libro libros;
public Autor(DatosAutor datosAutor, Libro libros) {
this.nombre = datosAutor.nombre();
this.añoNacimiento = datosAutor.añoNacimiento();
this.añoMuerte = datosAutor.añoMuerte();
this.libros = libros;
}
public Autor() {
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getAñoNacimiento() {
return añoNacimiento;
}
public void setAñoNacimiento(int añoNacimiento) {
this.añoNacimiento = añoNacimiento;
}
public int getAñoMuerte() {
return añoMuerte;
}
public void setAñoMuerte(int añoMuerte) {
this.añoMuerte = añoMuerte;
}
public Libro getLibros() {
return libros;
}
public void setLibro(Libro libros) {
this.libros = libros;
}
}
} CLASE LIBRO