Как поменять местами @JsonBackReference и @JsonManagedReference в зависимости от того, какая сущность является ссылкой

Я пытаюсь найти способ поменять местами @JsonBackRefence и @JsonManagedReference в зависимости от того, на какой объект я ссылаюсь из связанного репозитория.

Site.java

@Entity
@Table(name = "Site")
public class Site {

    @Id
    private String id;

    @OneToMany(mappedBy="site")
    @JsonManagedReference
    private List<Building> buildings;
}

Building.java

@Entity
@Table(name = "building")
public class Building{

    @Id
    private String id;

    @ManyToOne
    @JoinColumn(name = "SITE_ID")
    @JsonBackReference
    private Site site;
}

SiteRepository.java

public List<Site> findAll(); //Works as intended

BuildingRepository.java

public Building findById(buildingId); //Works if references are swapped

Однако при вызове findById(buildingId) я хочу поменять местами @JsonBackReference. Поэтому @JsonBackReference находится в Site.java, а @JsonManagedReference — в объекте Building.java.

Примечание: @JsonIdentityInfo почти справляется с этим, но дает мне слишком много информации, например: когда я вызываю findById(buildingId) из BuildingRepository, он дает мне все здания для сайта, присоединенного к найденному зданию.


person Abu Sulaiman    schedule 08.12.2017    source источник
comment
Не забудьте принять/проголосовать за ответы, которые вам помогли... ;)   -  person Cepr0    schedule 11.12.2017
comment
Извините, пришлось подождать, пока я не смогу протестировать его на работе, чтобы я мог дать правильный отзыв. Спасибо еще раз!   -  person Abu Sulaiman    schedule 11.12.2017


Ответы (1)


Если я правильно вас понял, аннотация @JsonIgnoreProperties должна вам помочь:

@JsonIgnoreProperties("site")
@OneToMany(mappedBy="site")
private List<Building> buildings;

@JsonIgnoreProperties("buildings")
@ManyToOne
private Site site;
person Cepr0    schedule 08.12.2017
comment
Да, это именно то, что мне было нужно. Я видел аннотацию раньше, но не знал, как она работает. Я на самом деле думал, что он будет игнорировать здания и сайт все время. Спасибо большое! - person Abu Sulaiman; 11.12.2017