es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java JPA SpringBoot Java JPA (Java Persistence API) es una especificación utilizada en aplicaciones Java para gestionar el acceso a bases de datos relacionales. Proporciona un conjunto de clases e interfaces para interactuar con la base de datos de manera más sencilla y eficiente. SpringBoot es un framework de Java que simplifica y acelera el desarrollo de aplicaciones basadas en el marco de Spring. Proporciona configuraciones predefinidas y convenciones para facilitar la creación de aplicaciones robustas y escalables. Al combinar Java JPA con SpringBoot, los desarrolladores pueden crear aplicaciones web y empresariales potentes y eficientes. La integración entre estas tecnologías permite una administración más fácil de los modelos de datos y una mayor productividad en el desarrollo de software.

Tengo la tabla A y la tabla B, la tabla B tiene una clave externa que hace referencia a la tabla A.

Clase EntityA

@Entity
@Table(name = “tableA”)
public class EntityA {

… … …

@OneToMany(mappedBy=”entityA”)
private Set entityBList;

}

Clase EntityB

@Entity
@Table(name = “tableB”)
public class EntityB{

… … …

@ManyToOne
@JoinColumn(name=”id_entityA”, nullable=false)
private EntityA entityA;

}

Pero cuando intento llamar al método findAll del repositorio (desde EntityA), obtengo:

No se pudo escribir el JSON: Recursión infinita

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Este error ocurre cuando hay una dependencia circular entre las clases. En este caso, dado que EntityA tiene una relación de uno a muchos con EntityB y EntityB tiene una relación de muchos a uno con EntityA, hay una dependencia circular.

    Para superar este problema, puedes usar las anotaciones @JsonIgnore o @JsonBackReference en la clase EntityA para ignorar la entidad entityBList al serializar a JSON.

    Por ejemplo,

    @Entity
    @Table(name = “tablaA”)
    public class EntityA {

    ... ... ...
    
    @OneToMany(mappedBy="entityA")
    @JsonIgnore    //Añade esta anotación para ignorar entityBList
    private Set<entityb> entityBList; 
    

    }

    O puedes usar las anotaciones @JsonManagedReference y @JsonBackReference en las clases EntityA y EntityB para crear una relación bidireccional y evitar la recursión infinita.

    Por ejemplo,

    @Entity
    @Table(name = “tablaA”)
    public class EntityA {

    ... ... ...
    
    @OneToMany(mappedBy="entityA")
    @JsonManagedReference    //Añade esta anotación para mapear entityBList
    private Set<entityb> entityBList; 
    

    }

    @Entity
    @Table(name = “tablaB”)
    public class EntityB{

    ... ... ...
    
    @ManyToOne
    @JoinColumn(name="id_entityA", nullable=false)
    @JsonBackReference    //Añade esta anotación para referirse a EntityA
    private EntityA entityA;
    

    }

Comments are closed.