JSONException:org.hibernate.LazyInitializationException在Spring struts hibernate应用程序中 [英] JSONException: org.hibernate.LazyInitializationException In Spring struts hibernate application

查看:147
本文介绍了JSONException:org.hibernate.LazyInitializationException在Spring struts hibernate应用程序中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我上面解释错误并做了一些研究,发现 org.springframework.orm.hibernate4.support.OpenSessionInViewFilter 是解决方案。但它不适用于我的应用程序。
在数据加载到jqGrid中时发生错误。
$ b Struts2操作类:

  import com.ast.domain.admin.AtDivision; 
import com.ast.domain.admin.AtOrganisation;
import com.ast.service.admin.OrganisationBo;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import java.util.ArrayList;
import java.util.List;

public class OraganisationAction extends ActionSupport implements ModelDriven< AtOrganisation> {

private String sidx;
//搜索字段
private String searchField;
//搜索字符串
private String searchString;
//他搜索操作['eq','ne','lt','le','gt','ge','bw','bn','in','ni', 'ew','en','cn','nc']
private String searchOper;
//您的总页数
私人整数总数= 0;
//您的结果列表
//私人列表< MyBean> gridModel;
//获取我们想要在网格中有多少行 - 网格中的rowNum属性
private Integer rows = 5;
//获取请求的页面。默认情况下,网格将其设置为1.
private Integer page = 0;
//排序顺序 - asc或desc
private String sord;
private boolean loadonce = false;
私人整数记录= 0;

private AtOrganisation org = new AtOrganisation();
private AtDivision div = new AtDivision();
私人列表< AtOrganisation> gridModel = new ArrayList< AtOrganisation>();
私人列表< AtOrganisation> temp_gridModel = new ArrayList< AtOrganisation>();

private OrganisationBo orgBo;

私人字符串aoId;

公共列表< AtOrganisation> getTemp_gridModel(){
return temp_gridModel;
}

public void setTemp_gridModel(List< AtOrganisation> temp_gridModel){
this.temp_gridModel = temp_gridModel;
}

public Integer getRecords(){
return records;
}

public void setRecords(整数记录){
this.records = records; $(b)if(this.records> 0& this.rows> 0){
this.total =(int)Math.ceil((double)this.records /(double)this .rows);
} else {
this.total = 0;
}
}

public String getSidx(){
return sidx;
}

public void setSidx(String sidx){
this.sidx = sidx;
}

public String getSearchField(){
return searchField;
}

public void setSearchField(String searchField){
this.searchField = searchField;
}

public String getSearchString(){
return searchString;
}

public void setSearchString(String searchString){
this.searchString = searchString;
}

public String getSearchOper(){
return searchOper;
}

public void setSearchOper(String searchOper){
this.searchOper = searchOper;
}

public Integer getTotal(){
return total;
}

public void setTotal(Integer total){
this.total = total;
}

public Integer getRows(){
return rows;
}

public void setRows(Integer rows){
this.rows = rows;
}

public Integer getPage(){
return page;
}

public void setPage(整数页){
this.page = page;
}

public String getSord(){
return sord;
}

public void setSord(String sord){
this.sord = sord;
}

public boolean isLoadonce(){
return loadonce;
}

public void setLoadonce(boolean loadonce){
this.loadonce = loadonce;
}

public List< AtOrganisation> getGridModel(){
return gridModel;
}

public void setGridModel(List< AtOrganisation> gridModel){
this.gridModel = gridModel;
}

public String getAoId(){
return aoId;
}

public void setAoId(String aoId){
this.aoId = aoId;
}

public void setOrgBo(OrganisationBo orgBo){

this.orgBo = orgBo;
}

public OrganisationBo getOrgBo(){
return orgBo;
}

public AtDivision getDiv(){
return div;
}

public void setDiv(AtDivision div){
this.div = div;
}

public AtOrganisation getOrg(){
return org;
}

public void setOrg(AtOrganisation org){

this.org = org;
}

@Override
public AtOrganisation getModel(){
return org;
}

public String gridaction(){
temp_gridModel = orgBo.showorg();
System.out.println(setRecords:+ temp_gridModel.size());
setRecords(temp_gridModel.size());
int to =(getRows()* getPage());
int from = to - getRows(); (> getRecords()){
to = getRecords();

if
}
if(loadonce){
setGridModel(temp_gridModel);
} else {
if(searchString!= null&& searchOper!= null&&!searchString.equals()&&!searchOper.equals()) {
System.out.println(在数据库中搜索);
if(searchOper.equalsIgnoreCase(cn)){
// setGridModel(DAO.findbyName(searchString));
}
} else {
System.out.println(Not Searching Anywhere);
//setGridModel(DAO.find(from,to));
System.out.println(dili 4444);
setGridModel(temp_gridModel);
}
}
System.out.println(getRecords():+(double)getRecords());
System.out.println((double)getRows():+(double)getRows());
total =(int)Math.ceil((double)getRecords()/(double)getRows());
System.out.println(tot+ total);
System.out.println(gridModel.size());
返回网格;
}

public String add()throws Exception {
orgBo.addOrg(org);
gridaction();
返回SUCCESS;


$ b public String delete()throws Exception {

orgBo.deleteOrg(org);
gridaction();
返回SUCCESS;
}

public String edit()抛出异常{

orgBo.updateOrg(org);
gridaction();
返回SUCCESS;
}



}

服务层获取组织方法:

  @Override 
@Transactional(propagation = Propagation .REQUIRED)
public List showorg(){

return orgDao.showorg();

DAO方法:

  @Override 
public List showorg(){

Session session = sessionfactory.getCurrentSession();

org.hibernate.Query query = session.createQuery(AtOrganisation);

List list = query.list();

返回列表;

}



web。 xml

 < context-param> 
< param-name> contextConfigLocation< / param-name>
< param-value> /WEB-INF/SpringConfiguration.xml< / param-value>
< / context-param>

< listener>
< listener-class> org.springframework.web.context.ContextLoaderListener< / listener-class>
< / listener>

< context-param>
< param-name> org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG< / param-name>
< param-value> /WEB-INF/tiles.xml< / param-value>
< / context-param>

< listener>
< listener-class> org.apache.struts2.tiles.StrutsTilesListener< / listener-class>
< / listener>

< filter>
< filter-name> struts2< / filter-name>
< filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
< / filter-class>
< / filter>

< filter-mapping>
< filter-name> struts2< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

< filter>
< filter-name>在视图过滤器中打开会话< / filter-name>
< filter-class> org.springframework.orm.hibernate4.support.OpenSessionInViewFilter< / filter-class>
< / filter>
< filter-mapping>
< filter-name>在视图过滤器中打开会话< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

Struts.xml:

 <拦截> 
< interceptor-stack name =defaultStack>
< interceptor-ref name =params>

< param name =acceptParamNames>
(\\ [\\d + \\] \\。)* \\w +((\\.\\w +)|(\\\ \\ [\\d + \\])|(\\(\\d + \\))|(\\ [ '\\w +' \\] )|(\\('\\w +'\\)))*
< / param>
< / interceptor-ref>
< / interceptor-stack>
< /拦截器>
< action name =* orgsclass =com.ast.action.admin.OraganisationAction
method ={1}>
< interceptor-ref name =defaultStack/>

< result name =gridtype =json>< / result>
< / action>

错误堆栈:

  21:56:35,526错误[org.apache.struts2.dispatcher.Dispatcher](http- / 127.0.0.1:8080-1)处理请求期间发生异常:org。 apache.struts2.json.JSONException:org.hibernate.LazyInitializationException:无法延迟初始化角色集合:com.ast.domain.admin.AtOrganisation.atDivisions,无法初始化代理 - 无会话:org.apache.struts2.json .JSONException:org.apache.struts2.json.JSONException:org.hibernate.LazyInitializationException:未能延迟初始化角色集合:com.ast.domain.admin.AtOrganisation.atDivisions,无法初始化代理 - 无Session 
在org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246)[struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
在org.apache.struts2.json。 JSONWriter.processCustom(JSONWriter.java:178)[struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
在org.apache.struts2.json.JSONWriter。过程(JSONWriter.java:168)[struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134)[struts2 -json-plugin-2.3.16.3.jar:2.3.16.3]
在org.apache.struts2.json.JSONWriter.write(JSONWriter.java:102)[struts2-json-plugin-2.3.16.3.jar :2.3.16.3]
at org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116)[struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:202)[struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
at org.apache.struts2.json.JSONResult。执行(JSONResult.java:176)[struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371)[xwork-core -2.3.16.jar:2.3.16]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)[xwork-core-2.3.16.jar:2.3.16]
在com.opensymphony.xwork2.interceptor.Param etersInterceptor.doIntercept(ParametersInterceptor.java:249)[xwork-core-2.3.16.jar:2.3.16]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)[xwork -core-2.3.16.jar:2.3.16]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)[xwork-core-2.3.16.jar:2.3.16]
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)[struts2-core-2.3.16.jar:2.3.16]
at org.apache.struts2.dispatcher。 Dispatcher.serviceAction(Dispatcher.java:562)[struts2-core-2.3.16.jar:2.3.16]
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) [struts2-core-2.3.16.jar:2.3.16]
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)[struts2-core-2.3.16 .jar:2.3.16]
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(应用程序$ f
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain。 java:214)[jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 230)[jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: $ jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.2.2.Final-红帽-1.jar:7。 2.2.Final-redhat-1]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)[jbossweb-7.2.2.Final-redhat-1.jar:7.2.2。 Final-redhat-1]
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)[jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final- redhat-1]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)[jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat- 1]
at org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:653)[jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat- 1]
at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:920)[jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final- redhat-1]
在java.lang.Thread.run(Thread.java:724)[rt.jar:1.7.0_40]
导致:org.apache.struts2.json.JSONException:org .hibernate.LazyInitializationException:未能延迟初始化角色集合:com.ast.domain.ad min.AtOrganisation.atDivisions,无法初始化代理 - 没有Session
请给一些方法来解决这个问题。


解决方案

您应该序列化为JSON只有那些您想要的属性在网格中显示。它可以通过不同的方式实现:
$ b $ 1)使用参数限制要序列化的属性给json结果

  @Result(type =json,params = {
includeProperties,gridModel \\ [\\d + \\ \\\] \\.id,gridModel \\ [\\d + \\] \\.name,total,records,rows,page,sidx,searchField,searchString,
excludeNullProperties,true
})

2) json注解。
$ b

  @JSON(serialize = false,deserialize = false)//这样可以防止输出名称字段值

如果您使用了Open Session In View过滤器,那么它可以加载这些属性并根据需要初始化它们,即在序列化期间。因为当您的操作返回JSON结果时,hibernate会话仍然保持打开状态。当结果返回时,Struts2执行它。此时该会议应该开放。为了使这成为可能,你应该配置过滤链的顺序。如果Open View In View过滤器处于第一顺序,那么可以在执行Struts2结果后关闭会话。

< filter>
< filter-name>在视图过滤器中打开会话< / filter-name>
< filter-class>
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
< / filter-class>
< / filter>
< filter-mapping>
< filter-name>在视图过滤器中打开会话< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

< filter>
< filter-name> struts2< / filter-name>
< filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
< / filter-class>
< / filter>
< filter-mapping>
< filter-name> struts2< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>


I'm getting above explain error and done some research and found that org.springframework.orm.hibernate4.support.OpenSessionInViewFilter is solution. But its not works with my application. Error occurs during data load into jqGrid.

Struts2 Action class :

import com.ast.domain.admin.AtDivision;
import com.ast.domain.admin.AtOrganisation;
import com.ast.service.admin.OrganisationBo;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import java.util.ArrayList;
import java.util.List;

public class OraganisationAction extends ActionSupport implements ModelDriven<AtOrganisation> {

    private String sidx;
    // Search Field
    private String searchField;
    // The Search String
    private String searchString;
    // he Search Operation ['eq','ne','lt','le','gt','ge','bw','bn','in','ni','ew','en','cn','nc']
    private String searchOper;
    // Your Total Pages
    private Integer total = 0;
    //Your result List
    //private List<MyBean> gridModel;
    //get how many rows we want to have into the grid - rowNum attribute in the grid
    private Integer rows = 5;
    //Get the requested page. By default grid sets this to 1.
    private Integer page = 0;
    // sorting order - asc or desc
    private String sord;
    private boolean loadonce = false;
    private Integer records = 0;

    private AtOrganisation org = new AtOrganisation();
    private AtDivision div = new AtDivision();
    private List<AtOrganisation> gridModel = new ArrayList<AtOrganisation>();
    private List<AtOrganisation> temp_gridModel = new ArrayList<AtOrganisation>();

    private OrganisationBo orgBo;

    private String aoId;

    public List<AtOrganisation> getTemp_gridModel() {
        return temp_gridModel;
    }

    public void setTemp_gridModel(List<AtOrganisation> temp_gridModel) {
        this.temp_gridModel = temp_gridModel;
    }

    public Integer getRecords() {
        return records;
    }

  public void setRecords(Integer records) {
        this.records = records;
        if (this.records > 0 && this.rows > 0) {
            this.total = (int) Math.ceil((double) this.records / (double) this.rows);
        } else {
            this.total = 0;
        }
    }

    public String getSidx() {
        return sidx;
    }

    public void setSidx(String sidx) {
        this.sidx = sidx;
    }

    public String getSearchField() {
        return searchField;
    }

    public void setSearchField(String searchField) {
        this.searchField = searchField;
    }

    public String getSearchString() {
        return searchString;
    }

    public void setSearchString(String searchString) {
        this.searchString = searchString;
    }

    public String getSearchOper() {
        return searchOper;
    }

    public void setSearchOper(String searchOper) {
        this.searchOper = searchOper;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public Integer getRows() {
        return rows;
    }

    public void setRows(Integer rows) {
        this.rows = rows;
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public String getSord() {
        return sord;
    }

    public void setSord(String sord) {
        this.sord = sord;
    }

    public boolean isLoadonce() {
        return loadonce;
    }

    public void setLoadonce(boolean loadonce) {
        this.loadonce = loadonce;
    }

    public List<AtOrganisation> getGridModel() {
        return gridModel;
    }

    public void setGridModel(List<AtOrganisation> gridModel) {
        this.gridModel = gridModel;
    }

    public String getAoId() {
        return aoId;
    }

    public void setAoId(String aoId) {
        this.aoId = aoId;
    }

    public void setOrgBo(OrganisationBo orgBo) {

        this.orgBo = orgBo;
    }

    public OrganisationBo getOrgBo() {
        return orgBo;
    }

    public AtDivision getDiv() {
        return div;
    }

    public void setDiv(AtDivision div) {
        this.div = div;
    }

    public AtOrganisation getOrg() {
        return org;
    }

    public void setOrg(AtOrganisation org) {

        this.org = org;
    }

    @Override
    public AtOrganisation getModel() {
        return org;
    }

    public String gridaction() {
        temp_gridModel = orgBo.showorg();
        System.out.println("setRecords : "+temp_gridModel.size());
        setRecords(temp_gridModel.size());
        int to = (getRows() * getPage());
        int from = to - getRows();

        if (to > getRecords()) {
            to = getRecords();
        }
        if (loadonce) {
            setGridModel(temp_gridModel);
        } else {
            if (searchString != null && searchOper != null && !searchString.equals("") && !searchOper.equals("")) {
                System.out.println("Searching within Database");
                if (searchOper.equalsIgnoreCase("cn")) {
                    // setGridModel(DAO.findbyName(searchString));
                }
            } else {
                System.out.println("Not Searching Anywhere");
                //setGridModel(DAO.find(from, to));
                System.out.println("dili 4444");
                setGridModel(temp_gridModel);
            }
        }
        System.out.println("getRecords() : "+(double) getRecords());
            System.out.println("(double) getRows() : "+(double) getRows());
        total = (int) Math.ceil((double) getRecords() / (double) getRows());
        System.out.println("tot " + total);
        System.out.println(gridModel.size());
        return "grid";
    }

    public String add() throws Exception {
        orgBo.addOrg(org);
        gridaction();
        return SUCCESS;

    }

    public String delete() throws Exception {

        orgBo.deleteOrg(org);
        gridaction();
        return SUCCESS;
    }

    public String edit() throws Exception {

        orgBo.updateOrg(org);
        gridaction();
        return SUCCESS;
    }



}

Service layer get org method :

  @Override
@Transactional(propagation = Propagation.REQUIRED)
public List showorg() {

    return orgDao.showorg();
}

DAO method :

  @Override
public List showorg() {

Session session = sessionfactory.getCurrentSession();

org.hibernate.Query query = session.createQuery("from AtOrganisation");

List list = query.list();

return list;

}

web.xml

 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/SpringConfiguration.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
        <param-value>/WEB-INF/tiles.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>Open Session in View Filter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Open Session in View Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Struts.xml :

<interceptors>
    <interceptor-stack name="defaultStack">
        <interceptor-ref name="params">

            <param name="acceptParamNames">
                (\\[\\d+\\]\\.)*\\w+((\\.\\w+)|(\\[\\d+\\])|(\\(\\d+\\))|(\\['\\w+'\\])|(\\('\\w+'\\)))*
            </param>
        </interceptor-ref>
    </interceptor-stack>
</interceptors>
<action name="*orgs" class="com.ast.action.admin.OraganisationAction"
        method="{1}">
    <interceptor-ref name="defaultStack"/>

    <result name="grid" type="json"></result>   
</action>

Error Stack :

  21:56:35,526 ERROR [org.apache.struts2.dispatcher.Dispatcher] (http-/127.0.0.1:8080-1) Exception occurred during processing request: org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.ast.domain.admin.AtOrganisation.atDivisions, could not initialize proxy - no Session: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.ast.domain.admin.AtOrganisation.atDivisions, could not initialize proxy - no Session
    at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246) [struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
    at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178) [struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
    at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168) [struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
    at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134) [struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
    at org.apache.struts2.json.JSONWriter.write(JSONWriter.java:102) [struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
    at org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116) [struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
    at org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:202) [struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
    at org.apache.struts2.json.JSONResult.execute(JSONResult.java:176) [struts2-json-plugin-2.3.16.3.jar:2.3.16.3]
    at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371) [xwork-core-2.3.16.jar:2.3.16]
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275) [xwork-core-2.3.16.jar:2.3.16]
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249) [xwork-core-2.3.16.jar:2.3.16]
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) [xwork-core-2.3.16.jar:2.3.16]
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) [xwork-core-2.3.16.jar:2.3.16]
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) [struts2-core-2.3.16.jar:2.3.16]
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562) [struts2-core-2.3.16.jar:2.3.16]
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) [struts2-core-2.3.16.jar:2.3.16]
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) [struts2-core-2.3.16.jar:2.3.16]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_40]
Caused by: org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.ast.domain.admin.AtOrganisation.atDivisions, could not initialize proxy - no Session
Please give some way to over come this issue.

解决方案

You should serialize to JSON only those properties that you want to show in the grid. It could be achieved by different ways:

1) Limit properties you want to serialize using parameters to json result

@Result(type = "json", params = {
       "includeProperties", "gridModel\\[\\d+\\]\\.id, gridModel\\[\\d+\\]\\.name, total, records, rows, page, sidx, searchField, searchString", 
   "excludeNullProperties", "true"
})

2) Exclude properties via json annotation.

@JSON(serialize = false, deserialize = false) // this prevents from output name field values

If you have used Open Session In View filter, then it can load those properties and initialize them on demand, i.e. during serialization. Because the hibernate session still remains open when your action returns JSON result. When result is returned Struts2 executes it. At this moment the session should be open. To make this possible you should configure the order of the filter chain. If Open Session In View filter is in the first order then is possible to close the session after Struts2 result is executed.

<filter>
    <filter-name>Open Session in View Filter</filter-name>
    <filter-class>
        org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>Open Session in View Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>   

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

这篇关于JSONException:org.hibernate.LazyInitializationException在Spring struts hibernate应用程序中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆