
Este error ocurre porque tienes una relacción en ambos sentidos entre dos clases. Es decir, supongamos que tienes una clase Persona y otra que se llama Equipo con una relación como sigue:
En Persona:
@OneToMany(fetch = FetchType.LAZY, mappedBy="plant")
public List<Equipo> getEquipo() {
return equipos;
}
En Equipo:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PERSONA_ID")
public Persona getPersona() {
return persona;
}
Es decir, en la clase Persona tenemos una lista con las Áreas que tiene relacionadas y desde cada Área podemos acceder a la Persona a la que pertenece. Esto hace que al serializar se entre en un bucle y nos muestre el error "A cycle is detected in the object graph".
Para solucionarlo tenemos que usar la anotación @XMLTransient en cada uno de los métodos get de las relaciones que nos causan problema. Por lo tanto nuestras relaciones quedarán como mostramos a continuación:
En Persona:
@XmlTransient
@OneToMany(fetch = FetchType.LAZY, mappedBy="plant")
public List<Equipo> getEquipos() {
return equipos;
}
En Equipo:
@XmlTransientY se evita el error de entrar en un loop infinito. Espero que os sirva
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PERSONA_ID")
public Persona getPersona() {
return persona;
}
Me ha servido perfectamente, muchas gracias!
ResponderEliminar