2013-08-13 14:33:42 [ERROR] (LazyInitializationException.java:42) - failed to lazily initialize a collection of role: com.huawei.ciweb.entity.po.RndlteCiVersion.rndlteCiBrokens, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.huawei.ciweb.entity.po.RndlteCiVersion.rndlteCiBrokens, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:108)
at org.hibernate.collection.PersistentSet.equals(PersistentSet.java:429)
at java.util.Vector.indexOf(Vector.java:361)
at java.util.Vector.contains(Vector.java:320)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:110)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:363)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:223)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:171)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:161)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:127)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:363)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:223)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:171)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:161)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:127)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:363)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:223)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:171)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:161)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:127)
at org.apache.struts2.json.JSONWriter.write(JSONWriter.java:95)
at org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116)
at org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:196)
at org.apache.struts2.json.JSONResult.execute(JSONResult.java:170)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:374)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.huawei.ciweb.entity.po.RndlteCiVersion" table="rndlte_ci_version" >
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="version" type="java.lang.String">
            <column name="version" length="100" not-null="true" unique="true">
                <comment>版本号</comment>
            </column>
        </property>
        <property name="commonVersion" type="java.lang.String">
            <column name="common_version" length="100" not-null="true">
                <comment>俗名</comment>
            </column>
        </property>
        <property name="versionPo" type="java.lang.String">
            <column name="version_po" length="100" not-null="true">
                <comment>版本经理或软件经理</comment>
            </column>
        </property>
        <property name="connectionPerson" type="java.lang.String">
            <column name="connection_person" length="2000">
                <comment>版本的所有接口人</comment>
            </column>
        </property>
        <property name="versionDomain" type="java.lang.String">
            <column name="version_domain" length="50" not-null="true">
                <comment>域</comment>
            </column>
        </property>
        <property name="software" type="java.lang.String">
            <column name="software" length="500">
                <comment>软件包Summary.xml文件共享路径</comment>
            </column>
        </property>
        <property name="smoking" type="java.lang.String">
            <column name="smoking" length="500">
                <comment>冒烟Summary.xml文件共享路径</comment>
            </column>
        </property>
        <property name="adapter" type="java.lang.String">
            <column name="adapter" length="500">
                <comment>适配层Summary.xml文件共享路径</comment>
            </column>
        </property>
        <property name="material" type="java.lang.String">
            <column name="material" length="500">
                <comment>资料Summary.xml文件共享路径</comment>
            </column>
        </property>
        <property name="necessaryTool" type="java.lang.String">
            <column name="necessary_tool" length="500">
                <comment>配套工具Summary.xml文件共享路径</comment>
            </column>
        </property>
        <property name="realtimeSharedDirectory" type="java.lang.String">
            <column name="realtime_shared_directory" length="500">
                <comment>实时构建工程共享目录</comment>
            </column>
        </property>
        <property name="wirelessMeasuringLink" type="java.lang.String">
            <column name="wireless_measuring_link" length="500">
                <comment>无线度量链接</comment>
            </column>
        </property>
         <property name="measurePath" type="java.lang.String">
            <column name="measure_path" length="500">
                <comment>CI度量的地址</comment>
            </column>
        </property>
        <property name="ciPath" type="java.lang.String">
            <column name="ci_path" length="500">
                <comment>CI度量的地址</comment>
            </column>
        </property>
        <property name="whetherShowIndex" type="java.lang.String">
            <column name="whether_show_index" length="1">
                <comment>1:展示在主页;0:不展示在主页</comment>
            </column>
        </property>
        <set name="rndlteCiResults" inverse="true">
            <key>
                <column name="flowid" not-null="true">
                    <comment>版本ID</comment>
                </column>
            </key>
            <one-to-many class="com.huawei.ciweb.entity.po.RndlteCiResult" />
        </set>
        
        <set name="rndlteCiBrokens" inverse="true">
            <key>
                <column name="flowid" not-null="true">
                    <comment>责任组</comment>
                </column>
            </key>
            <one-to-many class="com.huawei.ciweb.entity.po.RndlteCiBroken" />
        </set>
         <set name="rndlteCiPlans" inverse="true">
            <key>
                <column name="version_id">
                    <comment>版本外键</comment>
                </column>
            </key>
            <one-to-many class="com.huawei.ciweb.entity.po.RndlteCiPlan" />
        </set>
    </class>
</hibernate-mapping><?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.huawei.ciweb.entity.po.RndlteCiBroken" table="rndlte_ci_broken" >
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <many-to-one name="rndlteCiGroup" class="com.huawei.ciweb.entity.po.RndlteCiGroup" fetch="select" >
            <column name="groupid" not-null="true">
                <comment>责任组</comment>
            </column>
        </many-to-one>
        
         <many-to-one name="rndlteCiVersion" class="com.huawei.ciweb.entity.po.RndlteCiVersion" fetch="select" lazy="false">
            <column name="flowid" not-null="true">
                <comment>版本</comment>
            </column>
        </many-to-one>
        <property name="brokenTime" type="java.util.Date">
            <column name="broken_time" length="0">
                <comment>版本打断时间</comment>
            </column>
        </property>
        <property name="repairTime" type="java.util.Date" >
            <column name="repair_time" length="0">
                <comment>版本修复时间</comment>
            </column>
        </property>
        <property name="failedReason" type="java.lang.String">
            <column name="failed_reason" length="1000">
                <comment>失败原因</comment>
            </column>
        </property>
        <property name="feedbackPerson" type="java.lang.String">
            <column name="feedback_person" length="50">
                <comment>反馈人</comment>
            </column>
        </property>
        <property name="feedbackTime" type="java.util.Date">
            <column name="feedback_time" length="0">
                <comment>反馈时间</comment>
            </column>
        </property>
    </class>
</hibernate-mapping>帮忙看下什么原因,我在 many-to-one 加了 lazy="false"

解决方案 »

  1.   

    这个问题应该算老问题了吧
    你是懒加载,这个没问题,不过你的懒加载是在session关闭时才进行的,
    所以报这个错误。
    解决方法:要不在session关闭前加载完数据,要不就延长session时间。
      

  2.   


    的确算个老问题、 我很少遇到过,网上说了一大堆、 没解决问题。  请问 要不在session关闭前加载完数据,要不就延长session时间。  具体做法? 谢谢
      

  3.   

    延长时间的方式有一咱是这样的
    你要用spring来解决。
    在web.xml文件中配一个监听器:
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    另一种是你在session没有关闭之前,获取一下你的com.huawei.ciweb.entity.po.RndlteCiVersion.rndlteCiBrokensrndlteCiBrokens 这个属性的值。
      

  4.   

    给你2个改代码最少的方法:
    1.将你的懒加载去掉,
    2.你在session关闭前,将那对象初始化下,
    比如你取得懒加载对象,println一下它的属性。
    其他的方法,你参考下:
    http://www.iteye.com/problems/20454