將具有關聯關系的兩個表通過hibernate從數據庫中查出來后轉成Json對象時報錯解決:采用過濾器


 有一個A表,和B表,是one to many的關系。當我將B表從數據庫中查出后.

 通過:

  1. JSONArray responseJsonMsgs=JSONArray.fromObject(list);

轉成Json對象時報錯:    There is a cycle in the hierarchy!

 

稍微想想就能明白,這里產生了死循環查詢(跟hibernate的配置文件有關)。

 

解決方案,在轉成Json對象的時候過濾掉bean中引起死循環查詢的屬性(一般為設置的外鍵)。

 

  我這里寫了一個通用的過濾器對象,大家可以借鑒下

 

  1. package com.cfc.web.msgcenter;
  2. import net.sf.json.JsonConfig;
  3. import net.sf.json.util.PropertyFilter;
  4. public class JsonFilter {
  5.     public static JsonConfig getFilter(final String[] s){
  6.         JsonConfig config = new JsonConfig();
  7.         config.setJsonPropertyFilter(new PropertyFilter(){
  8.             
  9.             public boolean apply(Object source, String name, Object value) {
  10.              if(juge(s,name)) {
  11.               return true;
  12.              } else {
  13.               return false;
  14.              }
  15.             }
  16.             
  17.             public boolean juge(String[] s,String s2){
  18.                 boolean b = false;
  19.                 for(String sl : s){
  20.                     if(s2.equals(sl)){
  21.                         b=true;
  22.                     }
  23.                 }
  24.                 return b;
  25.             }
  26.            });
  27.         return config;
  28.     }
  29. }

 

轉換的時候調用過濾器

  1. JsonConfig config = JsonFilter.getFilter(new String[]{"gameclass"});//String數組中存儲的是要過濾的屬性
  2. JSONArray responseJsonMsgs=JSONArray.fromObject(list,config);

問題解決! 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM