easyui datagrid json出现 $.rows[0].account 原因分析

这个问题出现的时候我还是很纠结的,从来没有碰到过,后来我多方面测试终于找到问题所在,我们一般都是直接用别人的jar包很少会研究,之前我一直用的fastjson.jar这是阿里公司自己开发的json转换包,蛮好用的,但是这次却不行了,

后来我看了一下,这次我返回的json中java类中嵌套了另外的java类,而用其解决问题的时候,这个jar会首先获得不一样的引用,比如说一个类别由管理员管理,那么管理员可能一样,可能不一样,当id一样的时候上面的json转换jar包会引用之前已经查到的,所以出现这这个 $.rows[0].account这是对第一行account的引用,这是hibernate中的lazy(懒加载)导致的:

{"total":4,"rows":[{"account":{"id":1,"login":"admin","name":"管理员","pass":"admin"},"hot":true,"id":1,"type":"男士休闲"},{"account":{"$ref":"$.rows[0].account"},"hot":true,"id":2,"type":"女士休闲"},{"account":{"id":2,"login":"user","name":"客服A","pass":"user"},"hot":true,"id":3,"type":"儿童休闲"}]}
id为1的之前有,是有直接引用但是在easyui是不会识别这样的引用的,所以不行,而 fastjson.jar在面对这样一种情况的时候是存在弊端的,它不能分辨出来,后来我用了一下jackson-mapper-asl,测试发现它解决了这个问题,其实关键在于hibernate的lazy,在引用lazy时,它交给了 Javassist处理,这是fastjson.会把它当对象处理,而不会解析它 ,而在jackson他会对引用一直找下去(一直解析下去),所以会找到相应的值(但是这又存在一个问题:有三层嵌套查询是会出现no session的错误这里不做详细解释,所以这是在easyui中不会显示任何数据,而用fastjson.jar返回时是可以的因为他会回引用当对象不会解析,所以可以显示数据,但是相应的也会出现$.rows[0]...之类的东西,部分数据显示不出来,但是这里不涉及到三层嵌套查询,所以不过多阐述了,不理解的朋友可以私下和我聊),所以阿里在json转换包中本来是为了方便起见的做法,在这里不行了,因为hibernate的lazy的问题很大,我现在也越来越喜欢Mybatis了,mybatis引用fastjson.jar并不会出现这个问题,因为Mybatis不存在lazy

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值