json-lib 输出父子级联对象

2 篇文章 0 订阅
1 篇文章 0 订阅

java开发中,经常需要将父子对象的数据,通过json方式输出到前台,但使用json-lib输出时往往会出现,级联循环造成java的堆栈溢出,所以其对应的解决方案也很简单,就是破除级联


例子如下:

public class Grain implements java.io.Serializable {

         .....

         private Set<GrainPic> grainPics = new HashSet<GrainPic>(0);    //储粮图片

       .....

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "TGrain", cascade = {CascadeType.ALL })
    public Set<GrainPic> getGrainPics() {
        return this.grainPics;
    }

    public void setGrainPics(Set<GrainPic> grainPics) {
        this.grainPics = grainPics;
    }


}


@Entity
@Table(name = "t_grain_pic")
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler",
        "tgrain"   //  此处最关键,即不再回转输出Grain对象
        })   //破除子对象往回级联输出

public class GrainPic implements java.io.Serializable {

    private int id;
    private Grain TGrain;
    private String pic;


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

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

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "PID")
    public Grain getTGrain() {
        return this.TGrain;
    }

    public void setTGrain(Grain TGrain) {
        this.TGrain = TGrain;
    }

    @Column(name = "pic", nullable = false)
    public String getPic() {
        return this.pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }
}


上面的例子中 :Grain对象中通过grainPics 属性级联子对象GrainPic ,而GrainPic 对象又通过TGrain属性关联Grain对象,那么在json输出时就回形成一个这样的无限循环而内存溢出:

Grain->GrainPic->Grain->GrainPic .....

所以,最好的解决办法就是破除这个环,即在Grain->GrainPic 后不再循环输出Grain,问题得到圆满解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值