病症:這是一個lazy使用後的Exception,使用遲時加載,在session(hibernate裏的session),關閉後使用該對象的未加載變量,也就是說session已經關閉,沒有保存到內存中,而後你使用了,致使該異常 web
1 解決方案一 spring
在相應的配置文件中設置 lazy=‘false’ lazy顧名思義是「懶」 ,就是當加載當前對象的時候是否加載與之關聯的對象,當 lazy=‘false’ 時候 是加載, 默認是lazy=‘true’ 不加載 當你須要的時候在發起sql請求 sql
不過這方法的弊端在於 ,會把全部與之相關的數據多加載進來會形成內存浪費 緩存
2 或者使用 fetch="join" 默認是抓取內鏈接, 他就是強制在加載對象的時候一次加載與之關聯的內容放到緩存區 中,當再次取得時候不會在發起sql請求 ,無論你鏈接是否關閉同樣能夠取出來; 它的原理: 就是採用鏈接方法將相關聯的對象一次加載,覆蓋其設置的 lazy 屬性 服務器
Hibernate:
select
this_.ID as ID0_1_,
this_.S_ID as S2_0_1_,
this_.S_CJ as S3_0_1_,
students2_.ID as ID1_0_,
students2_.NAME as NAME1_0_,
students2_.AGE as AGE1_0_
from session
on this_.S_ID=students2_.ID
-------------------------------------
org.pojo.Students@6835fb
3 web.xml 文件中 設置過濾器針對每次請求,延遲關閉session時間,只有當服務器將信息返回給用戶時鏈接才關閉, app
<!-- 處理session 關閉問題 -->
<filter> fetch
<filter-name>opensession</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter this
</filter-class>
</filter>
<filter-mapping>
<filter-name>opensession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url
我只知道這幾種方式 嘿嘿