Recursión infinita con Jackson

Tengo problemas con Jackson 1.6.3 e Hibernate. Encontré este hilo aquí: Recursión infinita con Jackson JSON y problema de Hibernate JPA

Pero no solucionó el problema.

Tengo un objeto Nodo que tiene relaciones entrantes y salientes. Incluso con las anotaciones de @JsonManagedReference, en la consola del servidor de aplicaciones puedo ver las excepciones que se lanzan (recursividad infinita).

¿Existe alguna alternativa a eso?

@Entity
@Table(name="nodes")
public class Node implements Serializable {

@Id
private String id;

@Column(name="x_pos")
private double x;


@Column(name="y_pos")
private double y;

@OneToMany
@JoinColumn(name="source")
@JsonManagedReference("outgoingRelations")
private Set<Relation> outgoingRelations;


@OneToMany
@JoinColumn(name="target")
@JsonManagedReference("incomingRelations")
private Set<Relation> incomingRelations;



@Entity
@Table(name="relations")
public class Relation implements Serializable {

@Id
private Long id;

@ManyToOne
@JoinColumn(name="source")
@JsonBackReference("outgoingRelations")
private Node source;

@ManyToOne
@JoinColumn(name="target")
@JsonBackReference("incomingRelations")
private Node target;

saludos

preguntado el 08 de noviembre de 11 a las 13:11

2 Respuestas

contestado el 23 de mayo de 17 a las 13:05

Excepto que no funciona con Hibernate 4.2.2 y objetos javassist y listas internas de Hibernate. - ndtreviv

Hola, ¿hay otra forma de solucionar esto? @JsonIgnore ya no funciona. Gracias - José Mendes

Podemos intentar romper el ciclo en el extremo del nodo o en la relación siguiendo 3 formas

  • Utilice @JsonManagedReference y @JsonBackReference
  • Utilice @JsonIdentityInfo
  • Utilice @JsonIgnore

Utilice @JsonIdentityInfo

    @Entity
    @Table(name = "nodes")
    @JsonIdentityInfo(
              generator = ObjectIdGenerators.PropertyGenerator.class, 
              property = "id")
    public class Node {
        ...
    }
    
    
    
    @Entity
    @Table(name = "relations")
    @JsonIdentityInfo(
              generator = ObjectIdGenerators.PropertyGenerator.class, 
              property = "id")
    public class Relation {
        ...
    }

Utilice @JsonIgnore

@OneToMany(fetch = FetchType.LAZY,mappedBy="node")
@JsonIgnore
private List<Node> lstNode;

Consulte más en detalle aquí con la demostración de trabajo también.

contestado el 11 de mayo de 21 a las 08:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.