hibernate双向关联转化为Json数据

来源:互联网 发布:ubuntu下新建文件夹 编辑:程序博客网 时间:2024/06/10 18:30

用jQuery+Json开发过程遇到的dug:

2012-3-4 11:24:11 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [ProServlet] in context with path [/Second] threw exception
net.sf.json.JSONException: There is a cycle in the hierarchy!
 at net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97)
 at net.sf.json.JSONObject._fromBean(JSONObject.java:833)
 at net.sf.json.JSONObject.fromObject(JSONObject.java:168)
 at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:265)
 at net.sf.json.JSONObject._processValue(JSONObject.java:2808)
 at net.sf.json.JSONObject.processValue(JSONObject.java:2874)
 at net.sf.json.JSONObject.setInternal(JSONObject.java:2889)
 at net.sf.json.JSONObject.setValue(JSONObject.java:1577)
 at net.sf.json.JSONObject._fromBean(JSONObject.java:934)
 at net.sf.json.JSONObject.fromObject(JSONObject.java:168)
 at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:265)
 at net.sf.json.JSONArray._processValue(JSONArray.java:2514)
 at net.sf.json.JSONArray.processValue(JSONArray.java:2539)
 at net.sf.json.JSONArray.addValue(JSONArray.java:2526)
 at net.sf.json.JSONArray._fromCollection(JSONArray.java:1057)
 at net.sf.json.JSONArray.fromObject(JSONArray.java:123)
 at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:237)
 at net.sf.json.JSONObject._processValue(JSONObject.java:2808)
 at net.sf.json.JSONObject.processValue(JSONObject.java:2874)
 at net.sf.json.JSONObject.setInternal(JSONObject.java:2889)
 at net.sf.json.JSONObject.setValue(JSONObject.java:1577)
 at net.sf.json.JSONObject._fromBean(JSONObject.java:934)
 at net.sf.json.JSONObject.fromObject(JSONObject.java:168)
 at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:265)
 at net.sf.json.JSONArray._processValue(JSONArray.java:2514)
 at net.sf.json.JSONArray.processValue(JSONArray.java:2539)
 at net.sf.json.JSONArray.addValue(JSONArray.java:2526)
 at net.sf.json.JSONArray._fromCollection(JSONArray.java:1057)
 at net.sf.json.JSONArray.fromObject(JSONArray.java:123)
 at net.sf.json.JSONArray.fromObject(JSONArray.java:105)
 at cn.csdn.servlet.ProServlet.doGet(ProServlet.java:51)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
 at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
 at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
 at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:619)

想了半天,才想到是Hibernate的问题,hibernate产生了死循环查询(跟hibernate的配置文件有关)。

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

 

  

转换的时候调用过滤器

 

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

 

这样这个bug就可以解决了!
原创粉丝点击