hibernate3.x 异常 could not initialize proxy

本文介绍了在使用Hibernate框架时遇到的“could not initialize proxy - no Session”异常的原因及解决办法。详细解释了HibernateTemplate默认使用lazy加载策略带来的问题,并提供了两种解决方案:一是将load方法替换为get方法;二是使用OpenSessionInView过滤器,并注意其与Struts2过滤器的配置顺序,同时需配置事务处理。

使用HibernateTemplate的save、load等方法时,它的Session管理策略是:打开session,进行相关操作,默认使用 lazy加载结果,不会发出sql语句,返回的是代理类,然后关闭session,此时你得到了一个A的代理类,如果你要调用 A实例的getter方法,那么它就会去实际加载A对象,发出sql语句,可此时session已经关闭,因此 会抛出异常,提示ould not initialize proxy - no Session。


解决方案
1、session的load方法改成get就可以了
2、使用OpenSessionInView 但要注意hibernateFilter过滤器和struts2过滤器在映射时的先后顺序,同时要配置事物处理,否则会导致session处于只读状态而不能做修改、删除的动作


web.xml文件中如下配置


<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>*.do</url-pattern>
    </filter-mapping>


转载于:https://my.oschina.net/alexgaoyh/blog/206101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值