A maneira mais fácil de remover os relacionamentos recursivos bidirecionais?

Eu uso oGson biblioteca para converter objetos Java em uma resposta Json ... o problema é que, após uma solicitação JPA, o objeto recuperado do banco de dados não pode ser convertido devido a um relacionamento recursivo com outras entidades (veja minha pergunta anterior) por exemplo :

<code>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;
</code>

Meu código fonte:

<code>  EntityManagerFactory emf=Persistence.createEntityManagerFactory("JavaApplication21PU");
  GpsJpaController gjc=new GpsJpaController(emf);

  Gps gps=gjc.findGps("123456789012345");

  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);  
</code>

Como você pode ver aqui eu fiz:

<code>   for(int i=0;i<gps.getCoordonneesList().size();i++){
     gps.getCoordonneesList().get(i).setGpsImei(null);
   }  
</code>

apenas para matar o relacionamento recursivo definindo null para cada objeto GPS no coordonneesList.

Na sua opinião, esta é uma boa solução ou existe outro método mais prático? obrigado

questionAnswers(4)

yourAnswerToTheQuestion