hibernate双向关联和json-lib使用的死循环问题的解决

20 篇文章 0 订阅
2 篇文章 0 订阅

在我用ssh框架做图书管理系统的时候,用hibernate对图书和图书分类进行和双向关联。
这里写图片描述

这里写图片描述

在取出所有的图书分类并转化成json字符串的时候会报错。

原因是取出的图书类型包含set类型的图书集合,josn-lib转化的时候出现了死循环。

解决方法:
设置过滤器,jsonConfig.setJsonPropertyFilter(new PropertyFilter(){})
这里写图片描述

此方法有三个参数,第一个是Object类型的,是你要过滤的属性的类型;第二个参数是String类型,是你要过滤的属性的名称;第三个参数是Object类型的,是你要过滤的属性的值(值可能是String或其它类型的,所以用Object)。 返回值是boolean类型的,返回true;就是进行过滤,返回false,就是不进行过滤。

if语句的写法就要根据实际的需要了,比如说我这里要解决死循环,就要实现把BookType图书类型里的Set<Book> books属性过滤掉,那我的if语句就应该如上面那样写。总而言之就是JSON-lib在转化的时候,会对每个属性都调用这个apply方法,这样我们就要根据实际的业务需要,如果当前属性符合你的if条件,那你就要返回true,进行过滤。这样配置后,再测试,就发现获取Shop的时候死循环问题已经不再出现了。

同理在转换Book图书类的时候也需要同样的处理,由于Book类中的BookType属性的值是我们需要获取的,我们正是需要Book关联查询出BookType,所以用前面那张过滤方式会造成过滤掉我们需要的bookType。所以我们可以进行以下的配置,同样可以解决json转化的死循环,还可以获取我们想要的值。
这里写图片描述

不直接过滤bookType,等json转换完bookType的时候,准备对bookType中Set<Book>books 进行转换的时候进行过滤,因为正是因为这里造成了死循环,所以我们通过这样配置进行过滤,这样就既解决了死循环问题,又避免了Book里的bookType被过滤掉的问题。

更多解决方案可以参考:http://blog.csdn.net/tomcat_2014/article/details/50624869

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值