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

我有一个自动生成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的对象,当正常对象处理
    }

 

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

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值