1. 程式人生 > >Hibernate兩表多對多關係並引入第三表,JSON傳遞時出現死迴圈

Hibernate兩表多對多關係並引入第三表,JSON傳遞時出現死迴圈

There is a cycle in the hierarchy

出現原因:三表之間存在對映關係,若不限制迴圈,其中會由於表的外來鍵問題而出現錯誤

表:Permission 、Role 、PermissionRole

解決方法:

一、

Servlet:

    List<PermissionRole> perRole = daoP.getPermissionByRoleId( long id );
    List<Permission> list = new ArrayList<Permission>();
    Permission p = null;  
    for(PermissionRole pr : perRole){
     p = new Permission(pr.getPermission().getId(), pr.getPermission().getPermission(), pr.getPermission().getUrl(), pr.getPermission().getDescs()); //建構函式
     list.add(p);
    }
    JSONArray json = JSONArray.fromObject(list);

Bean:

新增建構函式:

   public Permission(String permission, String url, String descs) { //去除導致死迴圈的Set<PermissionRole> permissionRoles
        this.permission = permission;
        this.url = url;
        this.descs = descs;
        this.permissionRoles = permissionRoles;
    }

二、

基於jar包:fastjson-1.2.3.jar

map 自定義。

   SimplePropertyPreFilter filter = new SimplePropertyPreFilter(  Permission.class,"id","所需列","所序列");
   String josn=JSONArray.toJSONString(map,filter);

//把所需列提取出來,無需去除迴圈。

三:

忽略死迴圈問題。

 JsonConfig jsonConfig = new JsonConfig();  //建立配置檔案

  jsonConfig.setIgnoreDefaultExcludes(false);  //設定預設忽略

  jsonConfig.setExcludes(new String[]{

//這裡書寫需要過濾的東西,比如導致死迴圈的外來鍵。

});