Najprostszy sposób usunięcia dwukierunkowych relacji rekurencyjnych?
używamGson biblioteka do konwersji obiektów Java na odpowiedź Jsona ... problem polega na tym, że po żądaniu JPA obiekt pobrany z DB nie może zostać przekonwertowany z powodu rekurencyjnego związku z innymi jednostkami (zobacz moje poprzednie pytanie) na przykład :
<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>
Mój kod źródłowy:
<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>
Jak widać tutaj zrobiłem:
<code> for(int i=0;i<gps.getCoordonneesList().size();i++){ gps.getCoordonneesList().get(i).setGpsImei(null); } </code>
tylko po to, aby zabić relację rekurencyjną, ustawiając wartość null dla każdego obiektu GPS na liście koordynacji.
Twoim zdaniem jest to dobre rozwiązanie, czy jest inna metoda bardziej praktyczna? Dzięki