JPA一堆多循环引用错误 HttpMessageNotWritableException

发生了一个这样的错误

Resolved exception caused by Handler execution: org.springframework.http.converter.HttpMessageNotWritableException:
Could not write JSON document: Infinite recursion (StackOverflowError)

解决参照:

http://blog.csdn.net/qq_35357001/article/details/55505659

注意:ManyToOne属性上注解:

@JsonBackReference

没有起作用,在get方法上注解成功解决无线引用导致堆栈溢出的问题。


对onetomany的一方没有加任何的注解也可以从json转换到对象


package com.troy.keeper.monomer.demo.domain;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;

import javax.persistence.*;
import java.util.List;
import java.util.Set;

/**
 * 创建者: apple
 * 创建时间:2017/9/21.
 * 功能模块:
 */
@Entity
@Table(name = "testdazbibiao")
public class TESTDazhibiao {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "SCORE")
    private String score;

    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "zhibao_xifenzhibiao",joinColumns ={@JoinColumn(name = "testdazbibiaoid")},inverseJoinColumns = {@JoinColumn(name ="testxifenzhibiaoid" )})

    private List<TESTXifenzhibiao> children;

    public List<TESTXifenzhibiao> getChildren() {
        return children;
    }

    public void setChildren(List<TESTXifenzhibiao> children) {
        this.children = children;
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getScore() {
        return score;
    }

    public void setScore(String score) {
        this.score = score;
    }
}
package com.troy.keeper.monomer.demo.domain;



import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;

import javax.persistence.*;
import java.util.List;
import java.util.Set;

/**
 * 创建者: apple
 * 创建时间:2017/9/21.
 * 功能模块:
 */
@Entity
@Table(name = "testxifenzhibiao")
public class TESTXifenzhibiao {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "NAME")
    private String name;



    @Column(name = "SCORE")
    private String score;
    @Column(name = "GETMETHOD")
    private String method;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "testdazbibiaoid")
    //生成JSON时候忽略
   //

    private TESTDazhibiao TESTDazhibiao;


    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "xifenzhibiao_parameter",joinColumns ={@JoinColumn(name = "testxifendazbibiaoid")},inverseJoinColumns = {@JoinColumn(name ="testparameterid" )})

    private List<TESTParameter> parameterList;
    @JsonBackReference
    public com.troy.keeper.monomer.demo.domain.TESTDazhibiao getTESTDazhibiao() {
        return TESTDazhibiao;
    }

    public List<TESTParameter> getParameterList() {
        return parameterList;
    }

    public void setParameterList(List<TESTParameter> parameterList) {
        this.parameterList = parameterList;
    }

    public void setTESTDazhibiao(com.troy.keeper.monomer.demo.domain.TESTDazhibiao TESTDazhibiao) {
        this.TESTDazhibiao = TESTDazhibiao;
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public String getScore() {
        return score;
    }

    public void setScore(String score) {
        this.score = score;
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }
}




服务中添加大指标,同时会级联保存

public void addDazhibiao(TESTDazhibiao dazhibiao){
    List<TESTXifenzhibiao> xifenzhibiaoList =dazhibiao.getChildren();
    if(xifenzhibiaoList !=null) {
        for (TESTXifenzhibiao xifen : xifenzhibiaoList
                ) {
            List<TESTParameter> parameters = xifen.getParameterList();
            if(parameters != null) {
                for (TESTParameter p : parameters
                        ) {
                    p.setTESTxifenzhibiao(xifen);
                }
            }
            xifen.setTESTDazhibiao(dazhibiao);
        }
    }
    tesTzhibiaoRepository.save(dazhibiao);
}
查询大指标的同时也会级联获取
@Override
public List<TESTXifenzhibiao> queryAllXIFENDazhibiao(int fatherid){

    List<TESTXifenzhibiao> t = new ArrayList<>();
    return t;
}


 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值