Задать вопрос
@ScRsa
Delphi/Oracle Изучаю JAVA

Как десериализовать Entity при использовании @JsonIdentityReference(alwaysAsId=true)?

Есть связанные объекты Master - Detail

public class Master {
    private long id;
    @OneToMany(mappedBy = "detail")
    @JsonIgnore
    private Collection<Detail> detail;
}

public class Detail {
    private long id;
    @ManyToOne
    @JoinColumn(name = "master_id", referencedColumnName = "id", nullable = false)
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
    @JsonIdentityReference(alwaysAsId=true)
    private Master master;
}


Для того чтобы в JSON ответе при получении списка Detail не получать кучу ссылок на Master стоит @JsonIdentityReference(alwaysAsId=true). В результате чего в ответе получаю ID вместо объекта Master.
Все работает прекрасно, пока не приходится делать PUT/POST. Master по ID обратно не десериализуется.
Как правильно это дело исправить?
  • Вопрос задан
  • 1015 просмотров
Подписаться 2 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Разнесите Entity-сущности и POJO сущности в разные классы и сериализуйте/десериализуйте через Mapper-классы. Это хоть и увеличит количество классов, но зато упростит дальнейшую поддержку приложения - внутренние сущности и внешние со временем могут "разбежаться" по содержимому.

Если же такой вариант не подходит, тогда пишите свой десериализатор, в котором по ID получайте нужную сущность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы