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

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

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

    迷失北京

    BlogJava 聯(lián)系 聚合 管理
      60 Posts :: 0 Stories :: 13 Comments :: 0 Trackbacks

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

    舉一個(gè)例子

    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);
    

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

     

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

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

    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;
    	                }
    			}
            });
    

      

    這里我說明一下這段代碼的作用,他就是提供了一個(gè)過濾作用,如果遇到關(guān)聯(lián)的對(duì)象時(shí)他會(huì)自動(dòng)過濾掉,不去執(zhí)行關(guān)聯(lián)關(guān)聯(lián)所關(guān)聯(lián)的對(duì)象。有可能單獨(dú)看這段代碼不是很容易理解哪呢我貼出我hibernate中的配置關(guān)系映射的代碼幫助理解:

    <!-- 配置用戶與主題帖之間的關(guān)系 -->
    		<many-to-one name="user" class="bbs.po.User" column="user_id"/>
    		
    		<!-- 配置主題帖與回復(fù)的帖子之間的關(guān)系 -->
    		<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>
    

      

    因?yàn)樵谶@個(gè)類中配置了與user的多對(duì)一和與subMessage的一對(duì)多,查詢的時(shí)候會(huì)關(guān)聯(lián)查詢出一系列的非本類對(duì)象,導(dǎo)致Json-lib轉(zhuǎn)換失敗。

    下面我在捎帶說一下JSON-lib這個(gè)類的作用:它就是專門將pojo轉(zhuǎn)換為json對(duì)象,或?qū)son對(duì)象轉(zhuǎn)換為pojo的。這是它的用法:

    1. JSONArray subMsgs = JSONArray.fromObject(subMessages, config);其中config是可選的,當(dāng)出現(xiàn)上面的情況是可以配置config參數(shù),如果沒有上面的那種需求就可以直接使用fromObject(obj)方法,它轉(zhuǎn)換出來的就是標(biāo)準(zhǔn)的json對(duì)象格式的數(shù)據(jù),如下:

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

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

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

    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 性做久久久久久免费观看| 一区二区三区福利视频免费观看| 亚洲精品视频免费| 亚洲AV综合永久无码精品天堂 | 国产日韩在线视频免费播放| 成人永久福利免费观看| 亚洲成av人片天堂网| a在线免费观看视频| 亚洲av日韩av无码黑人| 两性色午夜免费视频| 亚洲AV午夜成人影院老师机影院| 亚洲区日韩精品中文字幕| 在线A级毛片无码免费真人| 国产成人精品亚洲一区| 狠狠色婷婷狠狠狠亚洲综合| 一级一级一级毛片免费毛片| 国产亚洲精品AA片在线观看不加载 | 亚洲人成77777在线播放网站| 国产一区二区三区在线免费| 精品特级一级毛片免费观看| 亚洲片一区二区三区| 两个人看的www免费视频| 2022年亚洲午夜一区二区福利| 色偷偷噜噜噜亚洲男人| 亚洲精品动漫人成3d在线| 免费萌白酱国产一区二区三区| 四虎永久免费网站免费观看| 精品久久久久久国产免费了| 亚洲尹人九九大色香蕉网站| 日韩免费a级毛片无码a∨| 曰韩无码AV片免费播放不卡| 亚洲男人天堂av| 国产成人免费a在线视频app| 99re6在线精品免费观看| 亚洲手机中文字幕| 亚洲av麻豆aⅴ无码电影| 无码精品国产一区二区三区免费| 久久亚洲国产成人影院网站| 8x成人永久免费视频| 国产亚洲精品成人久久网站 | 国产国拍亚洲精品福利|