如何根据引用的实体交换@JsonBackReference和@JsonManagedReference

Abu*_*man 1 java spring jackson spring-data-jpa

我试图找到一种根据我从关联存储库引用的实体来交换 @JsonBackRefence 和 @JsonManagedReference 的方法。

站点.java

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

    @Id
    private String id;

    @OneToMany(mappedBy="site")
    @JsonManagedReference
    private List<Building> buildings;
}
Run Code Online (Sandbox Code Playgroud)

建筑.java

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

    @Id
    private String id;

    @ManyToOne
    @JoinColumn(name = "SITE_ID")
    @JsonBackReference
    private Site site;
}
Run Code Online (Sandbox Code Playgroud)

站点存储库.java

public List<Site> findAll(); //Works as intended
Run Code Online (Sandbox Code Playgroud)

BuildingRepository.java

public Building findById(buildingId); //Works if references are swapped
Run Code Online (Sandbox Code Playgroud)

但是,当调用 findById(buildingId) 时,我想交换 @JsonBackReference。因此,@JsonBackReference 位于 Site.java 中,@JsonManagedReference 位于 Building.java 实体中。

注意:@JsonIdentityInfo几乎可以处理它,但它给了我太多信息,即:当我从 BuildingRepository 调用 findById(buildingId) 时,它为我提供了加入到找到的建筑物的站点的所有建筑物。

Cep*_*pr0 5

如果我理解正确的话,@JsonIgnoreProperties注释应该可以帮助你:

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

@JsonIgnoreProperties("buildings")
@ManyToOne
private Site site;
Run Code Online (Sandbox Code Playgroud)