亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何解決hibernate一對(duì)多注解懶加載失效問題

 更新時(shí)間:2021年10月15日 10:55:23   作者:山間明月江上清風(fēng)_  
這篇文章主要介紹了解決hibernate一對(duì)多注解懶加載失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

hibernate一對(duì)多注解懶加載失效

在House類里有關(guān)聯(lián)HouseInfo,設(shè)置了懶加載

但是頁(yè)面ajax返回還是有HouseInfos的數(shù)據(jù)。

經(jīng)排查,問題出在controller這邊

@response注解啟用jackson框架對(duì)House進(jìn)行解析

然后調(diào)用了每個(gè)屬性的get方法,自然houseInfos的懶加載就失效了

解決方法

給houseInfos字段加上@JsonIgnore注解忽略json解析

Hibernate懶加載異常說明及其解決

在集成ssh2三大框架的時(shí)候很容易就會(huì)造成懶加載異常,通常顯示的錯(cuò)誤信息是:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

懶加載異常出現(xiàn)的原因

我們?cè)贏ction中調(diào)用Service中的方法,方法中開始時(shí)open session,當(dāng)調(diào)用結(jié)束后close session,例如類User中有一個(gè)Department屬性,我們使用Hibernate查詢一個(gè)User時(shí),hibernate默認(rèn)是懶加載的,此時(shí)查詢出的User不會(huì)把Department中所有的信息查詢出來。

當(dāng)session 關(guān)閉后我們?cè)赗esult中(例如在jsp中打印department.name)使用到了Department的name屬性時(shí)就會(huì)出現(xiàn)懶加載異常。

解決方案1

不用懶加載(不推薦)

解決方案2

我們不在方法結(jié)束的時(shí)候關(guān)閉session,在執(zhí)行完Action Result之后,通過過濾器關(guān)閉session,具體如下:

使用OpenSessionInViewFilter解決解決懶加載問題,在web.xml中配置:

 <!-- openSessionInViewFilter,改過濾器在view渲染時(shí)始終開啟session,一勞永逸解決hibernate的懶加載問題,
      該過濾器必須配置在struts2過濾器之前,一般推薦使用(由于性能問題,在view渲染時(shí)始終開啟session)-->
   <filter>
      <filter-name>openSessionInViewFilter</filter-name>
      <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
   </filter>
   <filter-mapping>
      <filter-name>openSessionInViewFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

解決方案3

例如涉及三個(gè)類 分別為Survey、Page、Question類,三個(gè)類的關(guān)聯(lián)關(guān)系

class Survey{
  private Long id;
  private List<Page> pageList=new ArrayList<Page>();
}
class Page{
  private Long id;
  private List<Question> questionList=new ArrayList<Question>();
}
class Question{
  private Long id;
}

方法是強(qiáng)行在service層面是初始化代理對(duì)象.

 public Survey getSurveyWithChildren(Long sid){
   Survey s = surveyDao.getEntity(sid);
    //強(qiáng)行初始化pages和questions集合
    for(Page p : s.getPages()){
       p.getQuestions().size();
    }
    return s;
 }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論