Struts2在打包json格局的懶加載異常成績。本站提示廣大學習愛好者:(Struts2在打包json格局的懶加載異常成績)文章只能為提供參考,不一定能成為您想要的結果。以下是Struts2在打包json格局的懶加載異常成績正文
Hibernate中假如湧現了級聯查詢,便可能湧現懶加載成績,好比我如今有個Account(治理員)類、Category(商品種別)和Product(商品)類,從左到右都是一對多的關系,並且從右到左都是設置了@ManyToOne(fetch=FetchType.LAZY)。我如今要把商品信息查出來打包成json格局傳到前台,我在後台應用查詢語句為:
from Product p left join fetch p.category where p.name like:name
如許便可以把Product查出來了,然後Product中的Category也放出來了,然則Category中的Account不是現實對象,是臨時的署理對象,這點很好懂得,由於我就查了Product並且只級聯了Category,至於Category和Account就依據現實設置裝備擺設了(LAZY)。
如今將查詢出來的product放到Map中,然後轉成json格局前往到前台確定會湧現懶加載成績,由於在轉json的進程中會拿Account對象,然則此時session曾經封閉了,所以會報錯,有個很直接然則不太好的處理方法就是將Category中的LAZY改成EAGER,如許就可以把Account的信息也查出來,然則如許欠好。所以我們用另外一種方法:在struts.xml中設置一下黑名單,在轉json格局的時刻應用正則表達式將category中的account過濾失落,就不會去查account對象了,就不會有懶加載成績了。以下:
到這裡,應當就沒成績了。然則在我的項目中照樣報懶加載異常,也就是說我如許設置裝備擺設後基本沒有起感化。然則實際上,如許設置裝備擺設後就OK了,便可以正常的把數據打包成json格局傳給前台了。這成績困擾了我2天,後來索性先將LAZY改成EAGER,先把項目往下做。
明天我在另外一個Hibernate異常中,接洽到了這裡的異常,處理了!Hibernate中明天我要挪用get辦法獲得商品的信息,沒法獲得到,後台的掌握台沒有任何新聞,因為我開啟了dev形式,前台顯示了毛病信息:
java.lang.ClassCastException:cn.it.shop.model.Product_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy</span>
沒法轉成署理??為啥要轉成署理呢?普通不都是署理沒法轉成現實對象麼?因而我上彀搜刮了一下,這個成績能夠是因為項目中的一個javassist的jar包抵觸了,我去工程中檢討一下,果不其然:
還真的抵觸了喲喂……因而刪失落struts包中的誰人javassist-3.11.0.GA.jar便可,Hibernate這邊沒錯了,可以正常拿出商品信息了。然後我聯想到了2天前struts2轉json的成績,因而歸去將EAGER改回LAZY,成績也沒了,也能正常轉json了,愁悶,還真是jar包抵觸惹的禍。由於其時基本沒有報錯,只是前台那裡我查不到前往的json數據,只曉得沒有前往json數據,確定是後台轉json出了成績,依據已有的經歷,90%是懶加載的成績,然則沒想到是jar包抵觸惹的禍。
後話:假如jar包沒抵觸,然則沒法轉json,那根本上是懶加載惹的禍,應用struts.xml中設置裝備擺設黑名單的方法將懶加載的對象過濾失落的辦法很適用,不消修正POJO中的設置裝備擺設,我想把哪些字段轉到json中就轉哪些,不想就不轉,很便利。
原文鏈接:http://blog.csdn.net/eson_15/article/details/51394302
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。