Мне нужно создать модель с древовидными объектами, у которой все тогда есть ссылка между другими, мне нужно сериализовать это в мое приложение AngularJS, используя API Джексона, но, когда я достигаю конечной точки, JSON, что возвращается неверно. Есть в любом случае, чтобы сделать это? Лучший способ или способ исправить это?
Место класса:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Entity(name = "od_places")
public class place {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column
private int number;
@Column
private int zone;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "place_id")
private List<Dweller> dwellers;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "id")
private List<Route> routes;
@Column
private Geometry geom;
@Column
private float x;
@Column
private float y;
@Column
private Date lastUpdate;
@Column
private Date regDate;
@Column
private boolean disabled;
}
Класс жильца:
@Entity(name = "od_dweller")
public class Dweller {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String gender;
@Column
private boolean deficientient;
@Column
private String ageRange;
@Column
private String schooling;
@Column
private String ocupation;
@ManyToOne
private Place place;
@Column
private Date lastUpdate;
@Column
private Date regDate;
@Column
private boolean disabled;
}
Класс маршрута:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Entity(name = "od_routes")
public class Route {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String weekDay;
@Column
private int trip;
@OneToOne(orphanRemoval = true)
private Place origin;
@Column
private String departureTime;
@OneToOne(orphanRemoval = true)
private Place destiny;
@Column
private String arrivalTime;
@OneToOne(orphanRemoval = true)
private Dweller dweller;
@Column
private String reason;
@Column
private String travelMode;
@Column
private Date lastUpdate;
@Column
private Date regDate;
@Column
private boolean disabled;
}
Ответ почтальона:
[
{
"id": 1,
"name": "Prefeito Mario de Menezes, Avenida",
"number": 1,
"zone": 1,
"dwellers": [
{
"id": 1,
"gender": "Masculino",
"deficient": false,
"ageRange": "20 Anos",
"schooling": "Graduado",
"ocupation": "Assalariado",
"place": 1,
"lastUpdate": 1583895600000,
"regDate": 1583895600000,
"disabled": false
}
],
"routes": [
{
"id": 1,
"weekDay": "Terça-Feira",
"trip": 1,
"origin": 1, // THIS SHOULD BE AN OBJECT!
"departureTime": "08:00 - 08:29",
"destiny": {
"id": 2,
"logDom": "Ronat Valter Sodré, Rua",
"numLogDom": 2,
"ztDom": 2,
"dwellers": [],
"routes": [
{
"id": 2,
"weekDay": "Terça-Feira",
"trip": 2,
"origin": 2,
"departureTime": "08:30 - 08:59",
"destiny": 1,
"arrivalTime": "11:30 - 11:59",
"dweller": {
"id": 1,
"gender": "Masculino",
"deficient": false,
"ageRange": "20 Anos",
"schooling": "Graduado",
"ocupation": "Assalariado",
"place": 1, // THIS SHOULD ALSO BE AN OBJECT!
"lastUpdate": 1583895600000,
"regDate": 1583895600000,
"disabled": false
},
"reason": "Retorno à residência",
"travelMode": "Moto (como motorista)",
"lastUpdate": 1583895600000,
"regDate": 1583895600000,
"disabled": false
}
],
"geom": null,
"x": -23.274357,
"y": -51.060287,
"lastUpdate": 1583809200000,
"regDate": 1583809200000,
"disabled": false
},
"arrivalTime": "08:00 - 08:29",
"dweller": {
"id": 1,
"gender": "Masculino",
"deficient": false,
"ageRange": "20 Anos",
"schooling": "Graduado",
"ocupation": "Assalariado",
"place": 1,
"lastUpdate": 1583895600000,
"regDate": 1583895600000,
"disabled": false
},
"reason": "Lazer",
"travelMode": "Moto (como motorista)",
"lastUpdate": 1583895600000,
"regDate": 1583895600000,
"disabled": false
}
],
"geom": null,
"x": -23.266556,
"y": -51.038334,
"lastUpdate": 1583809200000,
"regDate": 1583809200000,
"disabled": false
},
2, // THIS NUMBER TWO BREAKS EVERYTHING HERE! WHERE IS MY SECOND OBJECT?
.... // The others object are returned as the first one, just the second object returns as a number 2.
]
}
Несколько вещей, чтобы прояснить: мне действительно нужен список на модели Place, потому что я хочу, чтобы каждое место, которое я загружаю, приходило с его маршрутами. Я работаю с Postgres. Все данные MOCK.
Что я хочу: я хочу решить эту проблему, сделать ее лучше и узнать, почему и как это работает.