使用gson.toJson(object)时发生错误:java.lang.StackOverflowError,求解决办法? strut2 + hibernate + spring.
现有有2个对象:shippingList(物流公司的托运单)和receiver(收货人),这2个对象设置了双向级联关系
以下是这2个对象的实体类代码:
@Entity(name = "t_shippingList")
public class FreightCenter_shippingList extends SystemOther_entityModel {
private Integer indexs; // 主键,唯一标志
private String id; // 托运单号
private ReferenceRoom_receiver receiver;//收货人
@ManyToOne(cascade = { CascadeType.MERGE }, fetch = FetchType.EAGER)
@JoinColumn(name = "receiver_indexs")
public ReferenceRoom_receiver getReceiver() {
return receiver;
}
public void setReceiver(ReferenceRoom_receiver receiver) {
this.receiver = receiver;
}
}
@Entity(name="t_receiver")
public class ReferenceRoom_receiver extends SystemOther_entityModel {
private Integer indexs; //主键
private String id; //客户代号
......
......
......
private Set<FreightCenter_shippingList> shippingList;//托运单
......
......
......
@OneToMany(fetch=FetchType.LAZY,mappedBy="receiver")
public Set<FreightCenter_shippingList> getShippingList() {
return shippingList;
}
public void setShippingList(Set<FreightCenter_shippingList> shippingList) {
this.shippingList = shippingList;
}
}
我们希望可以通过shippingList这个对象能够查询到receiver这个对象,添加修改shippingList的时候,也能添加修改receiver这个对象.
通过receiver这个对象也能查询shippingList这个对象.
对查询出来的数据,我们使用gson将它转换成json格式的数据,但是,当我们使用gson.toJson(object)语句进行转换时,发生了错误。
错误代码如下:
我想,之所以发生java.lang.StackOverflowError这个错误,是因为receiver(收货人)这个对象是shippingList(托运单)这个对象的一个属性,同时,shippingList(托运单)也是receiver(收货人)的一个属性,数据关联进入了死循环导致了这个问题.
可是另外一方面,我觉得很hibernate会解决双向级联后引起的这个问题。
我的问题是:
1)我的级联设置中是不是出现了什么问题?
2)对于这个错误,我该如何解决?
之所以出现这个错误,是因为双向关联时相互引用,导致进入死循环,解决办法是gson转换成json时,忽略receiver.shippingList这个字段,这个字段不用转换就可以了.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。