Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复spring boot一对多双向无限循环?_Spring_Spring Boot_Spring Data_Hibernate Mapping_Bidirectional - Fatal编程技术网

如何修复spring boot一对多双向无限循环?

如何修复spring boot一对多双向无限循环?,spring,spring-boot,spring-data,hibernate-mapping,bidirectional,Spring,Spring Boot,Spring Data,Hibernate Mapping,Bidirectional,我正在尝试使用SpringBoot和SpringDataJPA创建一对多的双向映射。请查看下面的实体 雇主实体 雇主回购 现在问题开始了,请看我的答案 它看起来像一个内讧循环,我的服务器抛出错误getOutputStream()已被调用用于此响应 I used @JsonBackReference & @JsonManagedReference 但问题是它的工作方式就像一对多 { "id":1, "employerName":"employer", "empl

我正在尝试使用SpringBoot和SpringDataJPA创建一对多的双向映射。请查看下面的实体

雇主实体

雇主回购

现在问题开始了,请看我的答案

它看起来像一个内讧循环,我的服务器抛出错误getOutputStream()已被调用用于此响应

 I used @JsonBackReference & @JsonManagedReference 
但问题是它的工作方式就像一对多

 {
   "id":1,
   "employerName":"employer",
   "employees":[
     {"id":1,"employeeName":"emp1"},
     {"id":2,"employeeName":"emp2"}
   ]
}  
如果我想和雇主达成多对一的共识。输出是

 [
  {
   "id":1,
   "employeeName":"emp1"
  },
  {
    "id":2,
    "employeeName":"emp2"}
 ]
它没有向我显示雇主的详细信息


请告诉我我做错了什么。提前谢谢

不要使用
@JsonBackReference
@JsonManagedReference
尝试使用注释
@jsonignoreporties

@JsonIgnoreProperties("employer")
private List<Employee> employees;  

@JsonIgnoreProperties("employees")
private Employer employer;  
@JsonIgnoreProperties(“雇主”)
私人名单雇员;
@JsonIgnoreProperties(“员工”)
私人雇主;

它会阻止Jackson呈现关联对象的指定属性。

您可以通过两个注释修改来解决问题
雇主等级

@Entity
public class Employer {
    private Long id;
    private String employerName;

    @OneToMany(cascade = CascadeType.ALL,
            mappedBy = "employer",
            orphanRemoval = true)
    private List<Employee> employees;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmployerName() {
        return employerName;
    }

    public void setEmployerName(String employerName) {
        this.employerName = employerName;
    }

    public List<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(List<Employee> employees) {
        this.employees = employees;
    }
}

有关更多信息,请访问此网站。

使用JSON时,双向映射存在问题。使用以下属性

@JsonIgnoreProperties("employer")
@JsonIgnoreProperties("employees")
请继续抓取类型


希望这能奏效

像这样更改getEmployer方法:

@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JsonProperty(access=JsonProperty.access.WRITE_ONLY)
公共雇主
{  
返回雇主;
}

谢谢您的回答!!但在按照您的建议添加注释后,我在获取员工详细信息时遇到以下异常:org.springframework.http.converter.HttpMessageNotWritableException:无法写入JSON:找不到类的序列化程序谢谢,我发现了与延迟获取相关的问题!!请您解释一下(@JsonBackReferenceand,@JsonManagedReference)的问题是什么,以及(@jsonignoreperties)的修复方法。请给出更多解释谢谢伙计,你节省了我的时间上面的建议很有效,因为你**不希望**员工详细信息出现在**雇主**json回复中。要显示员工详细信息,请不要在雇主实体中使用第1行上方的@JsonIgnoreProperties(“雇主”)。最后,我一直在寻找的答案是:)谢谢!
 {
   "id":1,
   "employerName":"employer",
   "employees":[
     {"id":1,"employeeName":"emp1"},
     {"id":2,"employeeName":"emp2"}
   ]
}  
 [
  {
   "id":1,
   "employeeName":"emp1"
  },
  {
    "id":2,
    "employeeName":"emp2"}
 ]
@JsonIgnoreProperties("employer")
private List<Employee> employees;  

@JsonIgnoreProperties("employees")
private Employer employer;  
@Entity
public class Employer {
    private Long id;
    private String employerName;

    @OneToMany(cascade = CascadeType.ALL,
            mappedBy = "employer",
            orphanRemoval = true)
    private List<Employee> employees;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmployerName() {
        return employerName;
    }

    public void setEmployerName(String employerName) {
        this.employerName = employerName;
    }

    public List<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(List<Employee> employees) {
        this.employees = employees;
    }
}
@Entity
public class Employee {
    private Long id;
    private String employeeName;


    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "employer_id")
    private Employer employer;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmployeeName() {
        return employeeName;
    }

    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }

    public Employer getEmployer() {
        return employer;
    }

    public void setEmployer(Employer employer) {
        this.employer = employer;
    }
}
@JsonIgnoreProperties("employer")
@JsonIgnoreProperties("employees")