hibernate中存在的session关闭问题解决方案

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

病症:这是一个lazy使用后的Exception,使用迟时加载,在session(hibernate里的session),关闭后使用该对象的未加载变量,也就是说session已经关闭,没有保存到内存中,然后你使用了,导致该异常

1 解决方案一

            在相应的配置文件中设置 lazy=‘false’ lazy顾名思义是“懒” ,就是当加载当前对象的时候是否加载与之关联的对象,当 lazy=‘false’ 时候 是加载,  默认是lazy=‘true’ 不加载  当你需要的时候在发起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

        SOCCOT this_     left outer join        STUDENTS students2_

            on this_.S_ID=students2_.ID
-------------------------------------
org.pojo.Students@6835fb

3 web.xml 文件中  设置过滤器针对每次请求,延迟关闭session时间,只有当服务器将信息返回给用户时连接才关闭,

        <!-- 处理session 关闭问题 -->    
     <filter>

               <filter-name>opensession</filter-name>
            <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

            </filter-class>
    </filter>    
        
    <filter-mapping>
            <filter-name>opensession</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>    
   

我只知道这几种方式 嘿嘿

你可能感兴趣的:(关于session关闭的问题)