복붙노트

[SPRING] 어떤 엔티티가 참조인지에 따라 @JsonBackReference와 @JsonManagedReference를 바꾸는 방법

SPRING

어떤 엔티티가 참조인지에 따라 @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가 거의 처리하지만, 너무 많은 정보를 제공합니다. 즉, BuildingRepository에서 findById (buildingId)를 호출하면 발견 된 건물에 연결된 모든 건물이 나에게 제공됩니다.

해결법

  1. ==============================

    1.올바르게 이해하면 @JsonIgnoreProperties 주석이 도움이 될 것입니다.

    올바르게 이해하면 @JsonIgnoreProperties 주석이 도움이 될 것입니다.

    @JsonIgnoreProperties("site")
    @OneToMany(mappedBy="site")
    private List<Building> buildings;
    
    @JsonIgnoreProperties("buildings")
    @ManyToOne
    private Site site;
    
  2. from https://stackoverflow.com/questions/47721145/how-to-swap-jsonbackreference-and-jsonmanagedreference-based-on-which-entity-i by cc-by-sa and MIT license