Utilizo la biblioteca Gson para convertir objetos Java a una respuesta Json ... el problema es que después de una solicitud JPA el objeto recuperado de DB no se puede convertir debido a una relación recursiva con otras entidades (see my previous question) por ejemplo:¿La forma más fácil de eliminar las relaciones recursivas bidireccionales?
public class Gps implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "IMEI", nullable = false, length = 20)
private String imei;
//some code here...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "gpsImei", fetch = FetchType.LAZY)
private List<Coordonnees> coordonneesList;
public class Coordonnees implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "IDCOORDONNEES", nullable = false)
private Integer idcoordonnees;
//some code here...
@JoinColumn(name = "GPS_IMEI", referencedColumnName = "IMEI", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Gps gpsImei;
Mi código fuente:
EntityManagerFactory emf=Persistence.createEntityManagerFactory("JavaApplication21PU");
GpsJpaController gjc=new GpsJpaController(emf);
Gps gps=gjc.findGps("123456789");
for(int i=0;i<gps.getCoordonneesList().size();i++){
gps.getCoordonneesList().get(i).setGpsImei(null);
}
Gson gson=new Gson();
String json=gson.toJson(gps);//convert to json response
System.out.println(json);
Como se puede ver aquí hice:
for(int i=0;i<gps.getCoordonneesList().size();i++){
gps.getCoordonneesList().get(i).setGpsImei(null);
}
solo para matar la relación recursiva estableciendo nulo para cada objeto GPS en la lista coordonneesList ..
En su opinión, esta es una buena solución o hay otro método más práctico? Gracias
Gracias! Esto fue un salvavidas cuando se trabaja con Hibernate. Me salvó un montón de problemas al convertir una entidad hibernate usando gson. – Knubo
funciona en Android también. –
¿qué jar contiene esta clase "GraphAdapterBuilder"? – pavan