JSON deserialization
У меня есть два Entity класса Route и Notification.
В Route есть поле List(Notification) @OneToMany а в Notification поле Route route @ManyToOne, JoinColumn(route_id), соответственно 2 таблицы в БД.
Если не использовать анотации @JsonManagedReference и @JsonBackReference, то при десериализации (POST метод JSON) ошибка, тк
route_id ForeignKey cannot be null
А если использовать эти аннотации, то обе таблицы заполняются данными. Суть вопроса - как работают данные 2 аннотации?
Ответы (1 шт):
For avoiding the problem, linkage is handled such that the property annotated with @JsonManagedReference annotation is handled normally (serialized normally, no special handling for deserialization) and the property annotated with @JsonBackReference annotation is not serialized; and during deserialization, its value is set to instance that has the "managed" (forward) link.
Т.е. поле, помеченное анотацией @JsonManagedReference сериализуется как если бы аннотации не было, а @JsonBackReference не сериализуется совсем, а при десериализации использует данные из поля, помеченного @JsonManagedReference.
Сделсано это для того, чтобы избежать бесконечной рекурсии(когда у вас есть список Notification в каждом из которых есть объект Route, в котором есть список Notification...