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

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

hibernate双向关联和json-lib使用的死循环问题的解决_第1张图片

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

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

解决方法:
设置过滤器,jsonConfig.setJsonPropertyFilter(new PropertyFilter(){})
hibernate双向关联和json-lib使用的死循环问题的解决_第2张图片

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

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

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

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

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

你可能感兴趣的:(Hibernate,SSH框架,JSON)