问题描述
ssh+ext使用jsonplugin-0.32.jar返回json格式,extends="json-default",type="json"单表OK,一对多关联时,是否可以取得相应关联对象信息?如:User与Role关联,获得用户user,是否可以同时取得关联的Role信息?JSON格式?THX!
解决方案
解决方案二:
<setname="testUsers"inverse="true"cascade="all"lazy="false"><key><columnname="role_id"not-null="true"/></key><one-to-manyclass="com.onlyfun.model.TestUser"/></set>SQL有发出,数据也能取得,转化成JSON时报错,如下:org.hibernate.LazyInitializationException:failedtolazilyinitializeacollectionofrole:com.onlyfun.model.User.role,nosessionorsessionwasclosed
解决方案三:
转化成json时,session关闭了?
解决方案四:
使用Jackson转化时也是一样的错。。。本地数据测试都是OK的,如下{"myBeans":[{"birthday":1291114593620,"age":10,"name":"name0"},{"birthday":1291114593620,"age":11,"name":"name1"}],"id":1}
解决方案五:
你实际数据查到的数据格式是什么样的?
解决方案六:
实际数据就是JAVABEAN,数据都对的。转化成JSON时报这个异常。无法转化对应的ROLE信息。SESSION关闭。
解决方案七:
我怀疑是类对象里还有一个对象,json无法转换
解决方案八:
你把代码贴出来吧,我不一定能解决,但别人看了可能会
解决方案九:
一对多时。无数据库交互时,是可以转化。与数据库交互时,报上面的异常。想在后台转化成JSON格式传至前台。单表的话也是可以的。关联时转化出现异常。不知道要如何解决。
解决方案十:
<setname="testUsers"inverse="true"cascade="all"not-fount="ignore"lazy="false">加上not-found试试呢
解决方案十一:
many-to-one里加not-fount="ignore"
解决方案十二:
SESSION关闭的原因
解决方案十三:
publicclassTestUserimplementsjava.io.Serializable{//FieldsprivateIntegeruserId;privateTestRoletestRole;privateStringuserName;privateDatebirthday;。。。}<hibernate-mapping><classname="com.onlyfun.model.TestUser"table="test_user"catalog="extfun"><idname="userId"type="java.lang.Integer"><columnname="user_id"/><generatorclass="native"/></id><many-to-onename="testRole"class="com.onlyfun.model.TestRole"fetch="select"><columnname="role_id"not-null="true"/></many-to-one>publicclassTestRoleimplementsjava.io.Serializable{//FieldsprivateIntegerroleId;privateStringroleName;privateSettestUsers=newHashSet(0);。。。}<classname="com.onlyfun.model.TestRole"table="test_role"lazy="false"catalog="extfun"><idname="roleId"type="java.lang.Integer"><columnname="role_id"/><generatorclass="native"/></id><propertyname="roleName"type="java.lang.String"><columnname="role_name"length="20"not-null="true"/></property><setname="testUsers"inverse="true"cascade="all"lazy="false"><key><columnname="role_id"not-null="true"/></key><one-to-manyclass="com.onlyfun.model.TestUser"/></set>DAO/***获得所有对象**@paramclazz*@return*/publicListgetObjects(Classclazz){returngetHibernateTemplate().loadAll(clazz);}测试类:publicvoidtest(){TestUserServicetestUserService=(TestUserService)applicationContext.getBean("testUserService");//获得testUserListList<TestUser>list=testUserService.findAllTestUser();if(list!=null&&list.size()>0){for(TestUseruser:list){System.out.println(user.getUserName()+"t"+user.getBirthday()+"t"+user.getUserName()+"t"+user.getTestRole().getRoleName()+"t"+user.getTestRole().getRoleId());//数据都有。。。}}PageVopageVo=newPageVo();pageVo.setList(list);//getinstanceObjectMappermapper=JacksonMapper.getInstance();//beantojsontry{StringWritersw=newStringWriter();JsonGeneratorgen;gen=newJsonFactory().createJsonGenerator(sw);mapper.writeValue(gen,pageVo);gen.close();Stringjson=sw.toString();//转化时报错。System.out.println(json);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}
解决方案十四:
THX两位。not-fount="ignore"添加后还是一样的异常。SESSION关闭的原因请问有没什么解决办法呢。THX!
解决方案十五:
你这个我没写过我用的是JsonArray.fromObject(list)Stringjson="";json=JSONArray.fromObject(list).toString(1);System.out.println(json);out.print(json);
解决方案:
not-fount="ignore"我打错了是not-found="ignore"
解决方案:
我添加的也是not-found="ignore"试了是一样的错。jackson的方法,自已练习的时候学的。项目中用的是jsonplugin。但关联时都是一样的错。org.hibernate.LazyInitializationException:failedtolazilyinitializeacollectionofrole:com.onlyfun.model.User.role,nosessionorsessionwasclosed
解决方案:
首先你的List集合可以输出值,说明取值没问题其次可以报错,说明问题在try块里//beantojsontry{StringWritersw=newStringWriter();JsonGeneratorgen;gen=newJsonFactory().createJsonGenerator(sw);mapper.writeValue(gen,pageVo);gen.close();Stringjson=sw.toString();//转化时报错。System.out.println(json);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}
再次,jsonplugin我没用过,不清楚工作原理,到底哪里涉及到session,我也不清楚.不如你自己写一个获取session的方法try开始打开finally关闭
解决方案:
<many-to-onename="testRole"class="com.onlyfun.model.TestRole"fetch="select">这里加上lazy="false"估计可以了吧,如果还不行,我也没什么办法了
解决方案:
该回复于2010-12-01 09:01:40被版主删除
解决方案:
在web里面配置<filter><filter-name>openSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>openSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>试试
解决方案:
web.xml有加的。。<filter><filter-name>openSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>openSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>testJackson</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>testJackson</filter-name><url-pattern>/*</url-pattern></filter-mapping><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param>