13

Вопрос по java – Самый простой способ удалить двунаправленные рекурсивные отношения?

Я используюGson  библиотека для преобразования объектов Java в ответ Json ... проблема в том, что после запросов JPA объект, извлеченный из БД, не может быть преобразован из-за рекурсивных отношений с другими объектами (см мой предыдущий вопрос) например :

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;

Мой исходный код:

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

Как вы можете видеть здесь, я сделал:

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

только чтобы уничтожить рекурсивные отношения, установив значение NULL для каждого объекта GPS в координирующем списке.

На ваш взгляд, это хорошее решение или есть другой способ более практичный? Спасибо

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceededstackoverflow.com/a/22788445/2182503

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • 1

    Error: User Rate Limit Exceeded

  • 2

    Error: User Rate Limit Exceeded

  • 0

    Error: User Rate Limit Exceeded

    transient

  • 26

    Error: User Rate Limit Exceeded

    Roshambo rock = new Roshambo("ROCK");
    Roshambo scissors = new Roshambo("SCISSORS");
    Roshambo paper = new Roshambo("PAPER");
    rock.beats = scissors;
    scissors.beats = paper;
    paper.beats = rock;
    
    GsonBuilder gsonBuilder = new GsonBuilder();
    new GraphAdapterBuilder()
        .addType(Roshambo.class)
        .registerOn(gsonBuilder);
    Gson gson = gsonBuilder.create();
    System.out.println(gson.toJson(rock));
    

    {
      '0x1': {'name': 'ROCK', 'beats': '0x2'},
      '0x2': {'name': 'SCISSORS', 'beats': '0x3'},
      '0x3': {'name': 'PAPER', 'beats': '0x1'}
    }
    

    not