如何解決hibernate一對多注解懶加載失效問題
hibernate一對多注解懶加載失效
在House類里有關聯(lián)HouseInfo,設置了懶加載
但是頁面ajax返回還是有HouseInfos的數(shù)據(jù)。
經(jīng)排查,問題出在controller這邊
@response注解啟用jackson框架對House進行解析
然后調(diào)用了每個屬性的get方法,自然houseInfos的懶加載就失效了
解決方法
給houseInfos字段加上@JsonIgnore注解忽略json解析
Hibernate懶加載異常說明及其解決
在集成ssh2三大框架的時候很容易就會造成懶加載異常,通常顯示的錯誤信息是:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
懶加載異常出現(xiàn)的原因
我們在Action中調(diào)用Service中的方法,方法中開始時open session,當調(diào)用結束后close session,例如類User中有一個Department屬性,我們使用Hibernate查詢一個User時,hibernate默認是懶加載的,此時查詢出的User不會把Department中所有的信息查詢出來。
當session 關閉后我們在Result中(例如在jsp中打印department.name)使用到了Department的name屬性時就會出現(xiàn)懶加載異常。
解決方案1
不用懶加載(不推薦)
解決方案2
我們不在方法結束的時候關閉session,在執(zhí)行完Action Result之后,通過過濾器關閉session,具體如下:
使用OpenSessionInViewFilter解決解決懶加載問題,在web.xml中配置:
<!-- openSessionInViewFilter,改過濾器在view渲染時始終開啟session,一勞永逸解決hibernate的懶加載問題, 該過濾器必須配置在struts2過濾器之前,一般推薦使用(由于性能問題,在view渲染時始終開啟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
例如涉及三個類 分別為Survey、Page、Question類,三個類的關聯(liá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; }
方法是強行在service層面是初始化代理對象.
public Survey getSurveyWithChildren(Long sid){ Survey s = surveyDao.getEntity(sid); //強行初始化pages和questions集合 for(Page p : s.getPages()){ p.getQuestions().size(); } return s; }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java中的@RequiredArgsConstructor注解詳解
這篇文章主要介紹了Java中的@RequiredArgsConstructor注解詳解,@RequiredArgsConstructor是Lombok的一個注解,簡化了我們對@Autowired書寫,@RequiredArgsConstructor注解可以代替@Autowired注解,需要的朋友可以參考下2024-01-01mybatis整合spring實現(xiàn)開啟mapper.xml映射文件掃描
這篇文章主要介紹了mybatis整合spring實現(xiàn)開啟mapper.xml映射文件掃描,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10java為什么使用BlockingQueue解決競態(tài)條件問題面試精講
這篇文章主要為大家介紹了java為什么使用BlockingQueue解決競態(tài)條件問題面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10詳解五種方式讓你在java中讀取properties文件內(nèi)容不再是難題
這篇文章主要介紹了詳解五種方式讓你在java中讀取properties文件內(nèi)容不再是難題 ,非常具有實用價值,需要的朋友可以參考下。2016-12-12解決@CachePut設置的key值無法與@CacheValue的值匹配問題
這篇文章主要介紹了解決@CachePut設置的key的值無法與@CacheValue的值匹配問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12