论坛首页 Java企业应用论坛

自动反射对象中的属性组装成json,no session or session was closed

浏览 2857 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-08  

我有一个自动生成json的代码,就是通过反射所有的属性读取成json,但是由于我的bean是hibernate查询出来的bean,存在延时加载的对象时提示no session or session was closed错误信息,当然提示信息时很正常的,因为还没有加载的对象,到了Action中的时候,会话已经关系,如果解决这个问题

 

其实主要是通过代码进行分析,hibernate采用的cglib进行的对象的代理,只要能够判断出来他的类型就可以进行区别对待了,这里进行了代码的编写,通过反射取出一个对象的属性,然后判断这个属性的值的类型(注意一定不要使用取出来的值,包括toString也不行),判断是否是PO类型,如果是说明是延时加载的,自己进行处理就可以了,因为延时加载的目的就是不让他在前台显示i,所以可以过滤掉就可以了。

 

    protected Object hibernateConvert(Object bean) {
        if(bean instanceof HibernateProxy){
            LazyInitializer lazyInitializer = ((HibernateProxy)bean).getHibernateLazyInitializer();
            if(lazyInitializer.isUninitialized()){ 
                //未初始化的处理 ,可以只是读取它的标志

                lazyInitializer.getIdentifier();
            }else 
                //已经初始化,可以直接读取初始化的值

               lazyInitializer.getImplementation();
        }
        if(bean instanceof PersistentSet || bean instanceof PersistentList){
            return new String[]{}; //对于集合Set类型的,由于没有读取出来,所以前台也不需要显示,直接赋空值
        }
        return bean;         //其他的非Hibernate的对象,当正常对象处理
    }

 

所有取出来的对象的值都经过这个方法进行处理,取得对象以后,在进行操作,这样就不会提示上面的错误信息了

 

天天碰新问题,天天解决新问题,。。。。。

   发表时间:2010-01-08  
open session in view
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics