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>    
   

我只知道这几种方式 嘿嘿

转载于:https://my.oschina.net/zihao/blog/137228

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值