错误如下:org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.gboooo.entity.db.Livesource.realtimematchstatistics, no session or session was closed
org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:243)
org.apache.struts2.json.JSONWriter.process(JSONWriter.java:165)
org.apache.struts2.json.JSONWriter.value(JSONWriter.java:131)
org.apache.struts2.json.JSONWriter.write(JSONWriter.java:99)
org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:112)
org.apache.struts2.json.JSONResult.execute(JSONResult.java:198)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237).....
说明: jquer访问struts2的action后在火狐的浏览器得到如上错误.
action代码如下:
public String execute() {
livesourceList=livesourceObserver.getLivesourceNewAllList();
return SUCCESS;
}
也就是返回一个List.   list由hibernate加载而来。
我也知道是延迟加载的相关错误。在Web.xml中加入了
<!-- 解决延迟加载的问题 -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
问题还没有解决。只好去查看xxx.hbn.xml文件,如下:
<class name="com.gboooo.entity.db.Livesource" table="LIVESOURCE" schema="XUNHAI" lazy="false">
        <id name="livesourceid" type="java.lang.Integer" column="LIVESOURCEID">
         <generator class="sequence" >
             <param name="sequence">AUTOADD_LIVESOURCE</param>
            </generator>
        </id>
        <many-to-one name="teamByGuestteamid" class="com.gboooo.entity.db.Team" fetch="select" >
            <column name="GUESTTEAMID" precision="22" scale="0" />
        </many-to-one>
        <many-to-one name="teamByHometeamid" class="com.gboooo.entity.db.Team" fetch="select">
            <column name="HOMETEAMID" precision="22" scale="0" />
        </many-to-one>
        <many-to-one name="schedule" class="com.gboooo.entity.db.Schedule" fetch="select">
            <column name="SCHEDULEID" precision="22" scale="0" />
        </many-to-one>
        <property name="hometeamsource" type="java.lang.Integer">
            <column name="HOMETEAMSOURCE" precision="22" scale="0" />
        </property>
        <property name="guestteamsource" type="java.lang.Integer">
            <column name="GUESTTEAMSOURCE" precision="22" scale="0" />
        </property>......不知道咋办了 
求专业人士给解药!

解决方案 »

  1.   

    貌似是session关闭了,还是不存在,可能是编码写法上有问题吧?你试下,你试把lazy="false" 改为lazy="true"不延迟加载,看看 
      

  2.   

    是懒加载的问题.  
      
       去取数据时候. session已经关了.
      

  3.   

    楼上两位,我也知道是懒加载的问题。我也知道是延迟加载的问题。我也知道是session关闭的问题。
    怎么解决!!!
      

  4.   

      在web.xml中加上下面的配置
    <!-- 配置解决Hibernate延迟初始化的Filter -->
    <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>
      

  5.   

    这个代码我加上去了还是没用
    <!-- 解决延迟加载的问题 -->
    <filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    出现的错误还是:
    org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.gboooo.entity.db.Livesource.realtimematchstatistics, no session or session was closed
      

  6.   

    我也遇到这个问题了,他们上面说的都是错的,问题都没看懂!我汗··这个应该是将某对象或集合转换成json时,因为对象或集合里面涉及到有些数据是延迟加载的问题,所以无法正确的转换,是这样才报的错,我晕·我现在也在找解决方法,网上说jsonplugin这种方法可以,但是我我试了,总不正确!目前正在解决中!如果你还没解决,或已解决,可以联系我,没解决,我们一起,解决了,你教哈我
      

  7.   

    找到方法了,把要转换成json的对象里面,如果有延迟加载的属性,把它设成NULL,就可以了,不用延迟加载去获取值,如果需要的话,直接去数据库查!这只是目前的解决方法
      

  8.   

    该过滤器一定要加在struts过滤器的上边才可以