首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

net.sf.json.JSONException: There is a cycle in the hierarchy!该怎么处理

2012-04-28 
net.sf.json.JSONException: There is a cycle in the hierarchy!struts2.1.8 中json格式转换问题:需要的7

net.sf.json.JSONException: There is a cycle in the hierarchy!
struts2.1.8 中json格式转换问题:需要的7个包全部导入——只是commons-lang-2.4.jar 我用的是commons-lang-2.3.jar。这个应该没问题吧!
我的配置跟页面都没有问题~~~!因为下面的测试可以正常提交跟响应!
但是在执行这一句的时候(this.getMgrMeetingList()返回的是list集合):

Java code
JSONObject json = JSONObject.fromObject(this.getMgrMeetingList());

有错:
Java code
net.sf.json.JSONException: There is a cycle in the hierarchy!

网上查了一下:说是Hibernate关联属性的问题、也修改了一些代码、但是就是不行!
我的action代码:
Java code
//获取会议室编号        String meet = request.getParameter("meetId");        JsonConfig config = new JsonConfig();        config.setJsonPropertyFilter(new PropertyFilter(){            public boolean apply(Object source, String name, Object value) {                if(name.equals("tbmeetroom") || "tbmeetroom" == name                        || name.equals("tbmeettype") || "tbmeettype" == name                        ||name.equals("tbmeetfiles") || "tbmeetfiles" == name                        || name.equals("tbmeetpersons") || "tbmeetpersons" == name ) {                                        return true;                                    } else {                                        return false;                                    }            }        });        //如果会议编号不为空        if(null !=meet && !"".equals(meet)){            //创建获取星期日期对象            TimeTake time = new TimeTake();            //调用查询方法            this.setMgrMeetingList(mgrService.getMgrByTime(Long.valueOf(meet), time.getTime()));          }                //创建json对象        JSONObject json = JSONObject.fromObject(this.getMgrMeetingList(),config);        result = json.toString();        System.out.println(result);        return SUCCESS;


我的属性文件:
XML code
<many-to-one name="tbmeetroom" class="com.boxun.crm.dao.entities.Tbmeetroom" fetch="select">            <column name="HUIYISHI" precision="22" scale="0">                <comment>会议室,外键,和会议室管理主键ID对应</comment>            </column>        </many-to-one>        <many-to-one name="tbmeettype" class="com.boxun.crm.dao.entities.Tbmeettype" fetch="select">            <column name="LEIXING" precision="22" scale="0">                <comment>会议类型,外键,和会议类型表的主键ID相关联</comment>            </column>        </many-to-one> <set name="tbmeetfiles" inverse="true">            <key>                <column name="MEETID" precision="22" scale="0">                    <comment>外键,和会议管理主键ID对应</comment>                </column>            </key>            <one-to-many class="com.boxun.crm.dao.entities.Tbmeetfile" />        </set>        <set name="tbmeetpersons" inverse="true">            <key>                <column name="MEETID" precision="22" scale="0">                    <comment>外键,和会议管理主键ID对应</comment>                </column>            </key>            <one-to-many class="com.boxun.crm.dao.entities.Tbmeetperson" />        </set>

就只有这些关联!调试的时候、在config里面莫名其妙的执行完毕!不知道错在什么地方、希望各位给看看!感激不尽!

------解决方案--------------------


我去给你找了一段你看看可以不.json-lib 出现net.sf.json.JSONException: There is a cycle in the hierarchy异常的解决办法收藏学习笔记 2009-01-19 10:00:09 阅读445 评论0 字号:大中小 订阅 .

因为项目中使用了AJAX技术,JAR包为:json-lib.jar, 在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题:
因为Hibernate中设置了自身关联:对象类.hbm.xml:
<many-to-one lazy="false" cascade="none">
<column name="group_id" />
</many-to-one>
起初想通过hibernate来解决问题,就是想过滤掉自身关联后来查资料发现不可能实现,最后找到通过JSON-LIB来过滤关联的集合属性,代码如下:
[解决办法]

Java code
JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。  下载地址:http://json-lib.sourceforge.net/  还要须要的第3方包:  org.apache.commons(3.2以上版本)  org.apache.oro  net.sf.ezmorph(ezmorph-1.0.4.jar)  nu.xom  1、Listboolean[] boolArray = new boolean[]{true,false,true};        JSONArray jsonArray1 = JSONArray.fromObject( boolArray );       System.out.println( jsonArray1 );        // prints [true,false,true]           List list = new ArrayList();        list.add( "first" );        list.add( "second" );        JSONArray jsonArray2 = JSONArray.fromObject( list );        System.out.println( jsonArray2 );       / prints ["first","second"]        JSONArray jsonArray3 = JSONArray.fromObject( "['json','is','easy']" );        System.out.println( jsonArray3 );        // prints ["json","is","easy"]         boolean[] boolArray = new boolean[]{true,false,true};      JSONArray jsonArray1 = JSONArray.fromObject( boolArray );      System.out.println( jsonArray1 );       // prints [true,false,true]          List list = new ArrayList();       list.add( "first" );       list.add( "second" );       JSONArray jsonArray2 = JSONArray.fromObject( list );       System.out.println( jsonArray2 );       // prints ["first","second"]       JSONArray jsonArray3 = JSONArray.fromObject( "['json','is','easy']" );       System.out.println( jsonArray3 );       // prints ["json","is","easy"] 

热点排行