欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Struts2在打包json格式的懶加載異常問(wèn)題

 更新時(shí)間:2016年06月07日 14:58:33   作者:eson_15  
這篇文章主要為大家詳細(xì)介紹了Struts2在打包json格式的懶加載異常問(wèn)題,感興趣的小伙伴們可以參考一下

Hibernate中如果出現(xiàn)了級(jí)聯(lián)查詢,就可能出現(xiàn)懶加載問(wèn)題,比如我現(xiàn)在有個(gè)Account(管理員)類、Category(商品類別)和Product(商品)類,從左到右都是一對(duì)多的關(guān)系,而且從右到左都是設(shè)置了@ManyToOne(fetch=FetchType.LAZY)。我現(xiàn)在要把商品信息查出來(lái)打包成json格式傳到前臺(tái),我在后臺(tái)使用查詢語(yǔ)句為:
from Product p left join fetch p.category where p.name like:name 
這樣就可以把Product查出來(lái)了,然后Product中的Category也放進(jìn)去了,但是Category中的Account不是實(shí)際對(duì)象,是暫時(shí)的代理對(duì)象,這點(diǎn)很好理解,因?yàn)槲揖筒榱薖roduct而且只級(jí)聯(lián)了Category,至于Category和Account就根據(jù)實(shí)際配置了(LAZY)。
現(xiàn)在將查詢出來(lái)的product放到Map中,然后轉(zhuǎn)成json格式返回到前臺(tái)肯定會(huì)出現(xiàn)懶加載問(wèn)題,因?yàn)樵谵D(zhuǎn)json的過(guò)程中會(huì)拿Account對(duì)象,但是此時(shí)session已經(jīng)關(guān)閉了,所以會(huì)報(bào)錯(cuò),有個(gè)很直接但是不太好的解決辦法就是將Category中的LAZY改成EAGER,這樣就能把Account的信息也查出來(lái),但是這樣不好。所以我們用另一種辦法:在struts.xml中設(shè)置一下黑名單,在轉(zhuǎn)json格式的時(shí)候使用正則表達(dá)式將category中的account過(guò)濾掉,就不會(huì)去查account對(duì)象了,就不會(huì)有懶加載問(wèn)題了。如下:

到這里,應(yīng)該就沒(méi)問(wèn)題了。但是在我的項(xiàng)目中還是報(bào)懶加載異常,也就是說(shuō)我這樣配置后根本沒(méi)有起作用。但是理論上,這樣配置后就OK了,就可以正常的把數(shù)據(jù)打包成json格式傳給前臺(tái)了。這問(wèn)題困擾了我2天,后來(lái)索性先將LAZY改成EAGER,先把項(xiàng)目往下做。
今天我在另一個(gè)Hibernate異常中,聯(lián)系到了這里的異常,解決了!Hibernate中今天我要調(diào)用get方法獲取商品的信息,無(wú)法獲取到,后臺(tái)的控制臺(tái)沒(méi)有任何消息,由于我開啟了dev模式,前臺(tái)顯示了錯(cuò)誤信息:
java.lang.ClassCastException:cn.it.shop.model.Product_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy</span> 
無(wú)法轉(zhuǎn)成代理??為啥要轉(zhuǎn)成代理呢?一般不都是代理無(wú)法轉(zhuǎn)成實(shí)際對(duì)象么?于是我上網(wǎng)搜索了一下,這個(gè)問(wèn)題可能是由于項(xiàng)目中的一個(gè)javassist的jar包沖突了,我去工程中檢查一下,果不其然:

還真的沖突了喲喂……于是刪掉struts包中的那個(gè)javassist-3.11.0.GA.jar即可,Hibernate這邊沒(méi)錯(cuò)了,可以正常拿出商品信息了。然后我聯(lián)想到了2天前struts2轉(zhuǎn)json的問(wèn)題,于是回去將EAGER改回LAZY,問(wèn)題也沒(méi)了,也能正常轉(zhuǎn)json了,郁悶,還真是jar包沖突惹的禍。因?yàn)楫?dāng)時(shí)根本沒(méi)有報(bào)錯(cuò),只是前臺(tái)那邊我查不到返回的json數(shù)據(jù),只知道沒(méi)有返回json數(shù)據(jù),肯定是后臺(tái)轉(zhuǎn)json出了問(wèn)題,根據(jù)已有的經(jīng)驗(yàn),90%是懶加載的問(wèn)題,但是沒(méi)想到是jar包沖突惹的禍。
后話:如果jar包沒(méi)沖突,但是無(wú)法轉(zhuǎn)json,那基本上是懶加載惹的禍,利用struts.xml中配置黑名單的方式將懶加載的對(duì)象過(guò)濾掉的方法很實(shí)用,不用修改POJO中的配置,我想把哪些字段轉(zhuǎn)到j(luò)son中就轉(zhuǎn)哪些,不想就不轉(zhuǎn),很方便。

原文鏈接:http://blog.csdn.net/eson_15/article/details/51394302

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Elasticsearch5.4的常見問(wèn)題總結(jié)

    基于Elasticsearch5.4的常見問(wèn)題總結(jié)

    下面小編就為大家分享一篇基于Elasticsearch5.4的常見問(wèn)題總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Java實(shí)現(xiàn)多個(gè)文檔合并輸出到一個(gè)文檔

    Java實(shí)現(xiàn)多個(gè)文檔合并輸出到一個(gè)文檔

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多個(gè)文檔合并輸出到一個(gè)文檔的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • springboot項(xiàng)目整合mybatis并配置mybatis中間件的實(shí)現(xiàn)

    springboot項(xiàng)目整合mybatis并配置mybatis中間件的實(shí)現(xiàn)

    這篇文章主要介紹了springboot項(xiàng)目整合mybatis并配置mybatis中間件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • IntelliJ IDEA快速創(chuàng)建getter和setter方法

    IntelliJ IDEA快速創(chuàng)建getter和setter方法

    這篇文章主要介紹了IntelliJ IDEA快速創(chuàng)建getter和setter方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • MyBatis框架簡(jiǎn)介及入門案例詳解

    MyBatis框架簡(jiǎn)介及入門案例詳解

    MyBatis是一個(gè)優(yōu)秀的持久層框架,它對(duì)jdbc的操作數(shù)據(jù)庫(kù)的過(guò)程進(jìn)行封裝,使開發(fā)者只需要關(guān)注SQL本身,而不需要花費(fèi)精力去處理例如注冊(cè)驅(qū)動(dòng)、創(chuàng)建connection、創(chuàng)建statement、手動(dòng)設(shè)置參數(shù)、結(jié)果集檢索等jdbc繁雜的過(guò)程代碼,本文將作為最終篇為大家介紹MyBatis的使用
    2022-08-08
  • java解析json數(shù)組方式

    java解析json數(shù)組方式

    這篇文章主要介紹了java解析json數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Spring Boot 日志配置方法(超詳細(xì))

    Spring Boot 日志配置方法(超詳細(xì))

    默認(rèn)情況下,Spring Boot會(huì)用Logback來(lái)記錄日志,并用INFO級(jí)別輸出到控制臺(tái)。下面通過(guò)本文給大家介紹Spring Boot 日志配置方法詳解,感興趣的朋友參考下吧
    2017-07-07
  • Java結(jié)構(gòu)型設(shè)計(jì)模式之適配器模式詳解

    Java結(jié)構(gòu)型設(shè)計(jì)模式之適配器模式詳解

    適配器模式,即將某個(gè)類的接口轉(zhuǎn)換成客戶端期望的另一個(gè)接口的表示,主要目的是實(shí)現(xiàn)兼容性,讓原本因?yàn)榻涌诓黄ヅ洌瑳](méi)辦法一起工作的兩個(gè)類,可以協(xié)同工作。本文將通過(guò)示例詳細(xì)介紹適配器模式,需要的可以參考一下
    2022-09-09
  • 在IntelliJ IDEA中創(chuàng)建和運(yùn)行java/scala/spark程序的方法

    在IntelliJ IDEA中創(chuàng)建和運(yùn)行java/scala/spark程序的方法

    這篇文章主要介紹了在IntelliJ IDEA中創(chuàng)建和運(yùn)行java/scala/spark程序的教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • IDEA2020 1.1中Plugins加載不出來(lái)的問(wèn)題及解決方法

    IDEA2020 1.1中Plugins加載不出來(lái)的問(wèn)題及解決方法

    這篇文章主要介紹了IDEA2020 1.1中Plugins加載不出來(lái)的問(wèn)題,本文還給大家提到了IDEA 2020.1.1 找不到程序包和符號(hào)的問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2020-06-06

最新評(píng)論