net.sf.json.JSONException: There is a cycle in the hierarchy!

或者net.sf.json.JSONException: java.lang.reflect.InvocationTargetException也是这个


首先说明错误的产生环境

有一个区域region.java,区域太大,于是分成多个分区,用一个set集合来装subarea(分区)对象

那么每个subarea.java分区都属于一个区域。这个区域就单独用一个region类型的属性来存储

这就是一对多的关系。


正题来了:这个错误的原因是在转换对象成为json的时候出现了死循环。

离线查询条件为:DetachedCriteria.forClass(Subarea.class);

查询完后得到一个分区对象,分区对象在转成json的时候分区对象是正常从数据库加载出来了

这个时候由于分区对象里面的区域对象设置的还是默认的懒加载,所以它里面的区域对象将会是一个代理的区域对象。

问题就出在这个代理对象这里了。转成json的时候不能有代理对象。

所以,在分区对象的区域set或者many-to-one关联那里需要加一个lazy="false"也就是说把对它的懒加载关闭掉

net.sf.json.JSONException: There is a cycle in the hierarchy!

贴出服务器端

net.sf.json.JSONException: There is a cycle in the hierarchy!

贴出web界面端

net.sf.json.JSONException: There is a cycle in the hierarchy!

web关键代码

// 定义列
var columns = [ [ {
field : 'id',
checkbox : true
}, {
field : 'showid',
title : '分拣编号',
width : 120,
align : 'center',
formatter : function(data,row ,index){
return row.id;
}
},{
field : 'province',
title : '省',
width : 120,
align : 'center',
formatter : function(data,row ,index){
return row.bcRegion.province;
/* return row.region.province; */
}
}, {
field : 'city',
title : '市',
width : 120,
align : 'center',
formatter : function(data,row ,index){
return row.bcRegion.city;
}
}, {
field : 'district',
title : '区',
width : 120,
align : 'center',
formatter : function(data,row ,index){
return row.bcRegion.district;
}
}, {
field : 'addresskey',
title : '关键字',
width : 120,
align : 'center'
}, {
field : 'startnum',
title : '起始号',
width : 100,
align : 'center'
}, {
field : 'endnum',
title : '终止号',
width : 100,
align : 'center'
} , {
field : 'single',
title : '单双号',
width : 100,
align : 'center'
} , {
field : 'position',
title : '位置',
width : 200,
align : 'center'

} ] ];


web端要的json

{"rows":[{"addresskey":"BcSubarea","bcRegion":{"bcSubareas":[{"$ref":"$.rows[0]"}],"city":"北京市","citycode":"beijing","district":"石景山区","id":"QY005","name":"北京市北京市石景山区","postcode":"110107","province":"北京市","shortcode":"BJBJSJS"},"endnum":"BcSubarea","id":"4028808d62d4199d0162d41a3bf20000","position":"BcSubarea","single":"0","startnum":"BcSubarea"}],"total":1}