hibernate中存在的session關閉問題解決方案

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

病症:這是一個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

        SOCCOT this_     left outer join        STUDENTS students2_

            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

我只知道這幾種方式 嘿嘿

相關文章
相關標籤/搜索