當表A和表B一對多的關系 對於A和B的實體類,設置FetchType=EAGER時,取A表數據,對應B表的數據都會跟着一起加載,優點不用進行二次查詢。缺點是嚴重影響數據查詢的訪問時間。 解決辦法FetchType=LAZY,此時查詢的訪問時間大大縮短,缺點是查詢表A 的數據時,訪問不到表B的數據。 解決辦法嘗試一,在web.xml中加入下面配置,表示在頁面中關閉session <!-- 把session的關閉延遲到jsp頁面顯示之后,在配在struts2上面。--> <filter> <filter-name>OpenSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInView</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 出現的問題是:新增加一條記錄回到列表頁面,對應的B表數據還是沒有。 解決辦法嘗試二: 在session未關閉前循環List,顯示調用,舉例如下 for(B b:bList){ b.getA(); } 出現問題:如果debug模式,可以獲得A信息,如果tomcat正常運行模式,還是取不到A。沒有具體研究是不是因為我們實在ManyToOne多的端取一端。 解決辦法三:此辦法可以應用 for(B b:bList){ Hibernate.initialize( b.getA()); } 解決辦法四:此辦法也可以應用 在session關閉后,我可以循環 for(B b:bList){ int aId = b.getA().getId(); A a = findAById(aId); b.setA(a); }
來源:https://blog.csdn.net/janefir/article/details/19555803