今天在完善自己做的網上書店的項目的時候,在查看書籍評論的時候準備使用ajax來操作(之前是直接頁面全部重新整理,感覺不爽,剛剛學了ajax,所以覺得ajax來弄),後台是用hibernate來操作資料庫的。但是當寫完代碼測試的時候突然報錯了。
然後就百度 Google尋找解決方案,發現大多數都是說因為查詢到的對象是放在list集合裡面的,然后里面的對象是在資料庫通過外部索引鍵關聯了的,也就是在物件模型中有多對一或者一對多等的關聯關係,
這樣查出來的list集合裡面有關聯的查出來就是一個對象而不是字串或者數字,導致JSONArray.fromObject()的時候再內部出現死迴圈。最後證實確實也是這個原因造成的,然後網上大部分的解決方案都是說的是把有關聯的對象的屬性給去掉,就/*過濾掉id屬性*/
JsonConfig config1 = new JsonConfig();
/*用數組的方式寫出要過濾的東西*/
config1.setExcludes(new String[]{"user"});
JSONObject p1 = JSONObject.fromObject(review,config1);
第一個參數是放入你要轉換的對象,list等.第二個參數放入JsonConfig 對象。
自己想了些許過後發現這樣的話如果你要查詢的欄位包括關聯的對象裡面的屬性值呢?這樣給它去除不轉換以後你在介面上就取不到了。所以似乎不能滿足我的要求。
最後自己覺得可以在為資料庫表寫一個javabean,裡面不用對象關聯,就如使用jdbc的時候的那樣,
然後把從資料庫裡面讀出來的資料list遍曆後把值全部取出來並一一賦值給新建立的這個javabean對象,在重新 new一個list,用來裝改變後的對象。這樣最後再用JSONArray.formObject(list),放入建立的list集合,這樣轉換就可以成功了。成功了沒報錯。
當然這個方法對於我來說已經可以了,畢竟還是新手,主要是問題能解決就ok了,不知道以後在strut裡面是否有改進?自己現在剛剛學完javaweb,然後hibernate都是自學的,ajax剛剛學完,所以大神些看到這個的話就不要說是你這個根本不叫解決了。