<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    迷失北京

    BlogJava 聯系 聚合 管理
      60 Posts :: 0 Stories :: 13 Comments :: 0 Trackbacks

        今天找到了一種新的方法來解決這個問題,hibernate的級聯關系解決了不少麻煩事,但是這種情況下卻添了麻煩。下面我說一下解決的思路:將有級聯關系的類分離,具體分離為剝離了有映射關系屬性的dto,和級聯關系所映射的dto,然后將分離出來的dto放到map中,這樣用json-lib工具轉化的時候就不會有問題了!

    舉一個例子

    role = this.roleService.searchRole(id);
            
            Role r = new Role();
            r.setRname(role.getRname());
            r.setRdescribe(r.getRdescribe());
            
            List<Limits> limits = new ArrayList<Limits>();
            limits.addAll(role.getLimits());
            
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("role", r);
            map.put("limits", limits);
            
            
            JSONObject jo = JSONObject.fromObject(map);
    

     (上面的是插敘部分,同時也是對下面這種解決方案不足之處的補充)

     

        今天莫名其妙的遇到了這樣的一個錯誤:net.sf.json.JSONException: There is a cycle in the....大概的意思也知道,但是由于剛剛使用JSON,也沒有加以思考直接上網查了一下。原因是這樣的:hibernate的關系映射在級聯查詢的時候會一連串的查詢出與之相關的一系列對象(當然這是在你配置了對象之間的映射關系),JSON-lib畢竟做到不是怎么成熟,所以這種形式的數據它還沒辦法解析成JSON對象,不過它也提供了一種解決方案下面提到。但是這個工具包已經夠可以了,現在我們已經可以把List,Map,pojo對象等直接轉換為JSON對象了!

         稍微說了一點廢話,不過也是由于剛剛認識JSON心里有點喜悅,下面就來說一下解決的具體辦法,解決方案是這樣

    JsonConfig config = new JsonConfig();
            config.setJsonPropertyFilter(new PropertyFilter() {
    			public boolean apply(Object arg0, String arg1, Object arg2) {
    				 if (arg1.equals("user") ||arg1.equals("subMessages")) {
    	                    return true;
    	                } else {
    	                    return false;
    	                }
    			}
            });
    

      

    這里我說明一下這段代碼的作用,他就是提供了一個過濾作用,如果遇到關聯的對象時他會自動過濾掉,不去執行關聯關聯所關聯的對象。有可能單獨看這段代碼不是很容易理解哪呢我貼出我hibernate中的配置關系映射的代碼幫助理解:

    <!-- 配置用戶與主題帖之間的關系 -->
    		<many-to-one name="user" class="bbs.po.User" column="user_id"/>
    		
    		<!-- 配置主題帖與回復的帖子之間的關系 -->
    		<set name="subMessages" table="sub_message" inverse="true" cascade="all" lazy="false" order-by="date asc">
    			<key column="theme_id" />
    			<one-to-many class="bbs.po.SubMessage" />
    		</set>
    

      

    因為在這個類中配置了與user的多對一和與subMessage的一對多,查詢的時候會關聯查詢出一系列的非本類對象,導致Json-lib轉換失敗。

    下面我在捎帶說一下JSON-lib這個類的作用:它就是專門將pojo轉換為json對象,或將json對象轉換為pojo的。這是它的用法:

    1. JSONArray subMsgs = JSONArray.fromObject(subMessages, config);其中config是可選的,當出現上面的情況是可以配置config參數,如果沒有上面的那種需求就可以直接使用fromObject(obj)方法,它轉換出來的就是標準的json對象格式的數據,如下:

    {["attr", "content", ...}, ...]}

    2. JSONObject jTmsg = JSONObject.fromObject(themeMessage, config);這是專門用來解析標準的pojo,或者map對象的,pojo對象的格式就不用說了,map的形式是這樣的{"str", "str"}。當然這是我用到的幾個用法,我也沒有深究,所以說的不對的地方大家多多指教!!

    posted on 2011-03-31 22:08 王康 閱讀(1931) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: a级亚洲片精品久久久久久久| 日韩在线视频免费看| 亚洲精品无码av人在线观看 | 免费无码精品黄AV电影| 亚洲视频一区二区三区| 免费福利在线播放| 亚洲一区二区影视| 性做久久久久免费看| 免费一级全黄少妇性色生活片 | 亚洲乱亚洲乱妇无码| 国产91久久久久久久免费| 老司机午夜性生免费福利| 亚洲性日韩精品一区二区三区 | 91免费精品国自产拍在线不卡| 亚洲乱码在线卡一卡二卡新区| 午夜爱爱免费视频| 美女视频黄a视频全免费网站色| 亚洲AⅤ无码一区二区三区在线| 香蕉视频在线免费看| 亚洲人成网www| 无人在线观看免费高清视频| 激情婷婷成人亚洲综合| 国产专区一va亚洲v天堂| 女人体1963午夜免费视频| 亚洲在成人网在线看| 国产成人综合久久精品免费| 中文毛片无遮挡高清免费| 亚洲精品电影天堂网| 国产成人精品免费视频软件| 在线观看免费无码视频| 亚洲国产成+人+综合| 亚洲 无码 在线 专区| 久久免费公开视频| 亚洲av色香蕉一区二区三区蜜桃| 亚洲综合另类小说色区| 7723日本高清完整版免费| 尤物视频在线免费观看| 久久久久久亚洲Av无码精品专口| 永久免费bbbbbb视频| 久久er国产精品免费观看2| 亚洲狠狠色丁香婷婷综合|