刚学SSH整合.做完功课出现一个问题hibernate 一对多关联的 <set /> 里的属性,如果延时加载的Lazy属性不写活着设为false就会报错.
        <set name="petDiaries" inverse="true" lazy="true" order-by="diary_id desc">
            <key>
                <column name="diary_pet_id" />
            </key>
            <one-to-many class="com.yyaccp.pet.entity.PetDiary" />
        </set>
错误:org.hibernate.LazyInitializationException:  ....., no session or session was closed但是如果我把Lazy设为false就不会出现问题.但这样就占多了资源了啊..我同学们没设为false都不会出错.为什么会出现这种情况?我之前没整合的时候这样也没错.整合后dao层用的是HibernateDaoSupport.getHibernateTemplate()来操作数据的.好像就是改用这个的时候开始出现这个错误了.何解?怎解? tell me why ~please~

解决方案 »

  1.   

    如果要设置true, 一般需设置OpenSessionInView  过滤器我的新书刚上架,欢迎订购:
    《搜索引擎零距离—基于Ruby+Java搜索引擎原理与实现》 清华出版社。
    http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10105450
      

  2.   

    的确是延迟加载的问题解决方法可以为开启OpenSessionInView也可以参考http://daweiangel.javaeye.com/blog/288119
      

  3.   

    org.hibernate.LazyInitializationException你把lazy设为true,也就是延迟加载它,就是在session没关时你用关联对象,才会去执行查询.而你在session关闭后才去用关联对象,当然会throw org.hibernate.LazyInitializationException,因为session销毁了
      

  4.   

    延时加载异常  因为你加载的时候 session已经关闭了 所以报延时加载错误 
    延时加载 默认的是true   解决 : 如果有用了spring 可以 
    写个单独管理session的类 继承OpenSessionInviewFilter  这个类 并实现这个类里面的方法  在到web里面如以下配置<filter>
    <filter-name>工程名</filter-name>
    <filter-class>org.springfreamwork.....OpenSessionInviewdFilter</filter-class》

    <int-param>
    <param-name>sessionFactoryBeanName</param-name>//名字不能变
    <param-value>sessionFactory</param-value> //获得session的bean的id
    </int-param>
    </filter><filter-mapping>
    <filter-name></filter-name>
    <u..-param>/*</u..-param>
    </filter-mapping>如果只用到了hibernate 可以到dofilter测试类 里面去实现 
    如果 session是关闭的 就把session打开 如果session是打开的就直接返回