您的位置:首页 > 数据库

将具有关联关系的两个表通过hibernate从数据库中查出来后转成Json对象时报错解决:采用过滤器

2013-03-08 20:14 573 查看
有一个A表,和B表,是one to many的关系。当我将B表从数据库中查出后.

通过:

JSONArray responseJsonMsgs=JSONArray.fromObject(list);

转成Json对象时报错: There is a cycle in the hierarchy!

稍微想想就能明白,这里产生了死循环查询(跟hibernate的配置文件有关)。

解决方案,在转成Json对象的时候过滤掉bean中引起死循环查询的属性(一般为设置的外键)。

我这里写了一个通用的过滤器对象,大家可以借鉴下

package com.cfc.web.msgcenter;

import net.sf.json.JsonConfig;

import net.sf.json.util.PropertyFilter;

public class JsonFilter {

public static JsonConfig getFilter(final String[] s){

JsonConfig config = new JsonConfig();

config.setJsonPropertyFilter(new PropertyFilter(){

public boolean apply(Object source, String name, Object value) {

if(juge(s,name)) {

return true;

} else {

return false;

}

}

public boolean juge(String[] s,String s2){

boolean b = false;

for(String sl : s){

if(s2.equals(sl)){

b=true;

}

}

return b;

}

});

return config;

}

}

转换的时候调用过滤器

JsonConfig config = JsonFilter.getFilter(new String[]{"gameclass"});//String数组中存储的是要过滤的属性

JSONArray responseJsonMsgs=JSONArray.fromObject(list,config);

问题解决!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐