从循环引用到hibernate的游离化
问题描述:
列表页面,50多条数据只显示3条,其他的也显示出来了,不过全部都是空白,差点哭晕在厕所
然后debug断点进去看,发现好多的json数据长这个样子的
"dept":{"$ref":"$[0].dept"
(这里给的是类似这样的字符串)
"$ref":"$"} 引用根对象
{"$ref":"@"} 引用自己
{"$ref":".."} 引用父对象
{"$ref":"../.."} 引用父对象的父对象
{"$ref":"$.members[0].reportTo"} 基于路径的引用
查着就发现了循环引用的新名词
附上一个详细链接 循环引用
即使用的是fastjson,在list转json的时候出现了循环引用。
我尝试关闭的时候报了这样的错
WARN: Nested in org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.StackOverflowError: java.lang.StackOverflowError at java.util.LinkedHashMap$KeyIterator.<init>(LinkedHashMap.java:404) at java.util.LinkedHashMap.newKeyIterator(LinkedHashMap.java:417) at java.util.HashMap$KeySet.iterator(HashMap.java:1002) at java.util.HashSet.iterator(HashSet.java:170) at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:187) at com.alibaba.fastjson.serializer.CollectionSerializer.write(CollectionSerializer.java:68) at com.alibaba.fastjson.serializer.JSONSerializer.writeWithFieldName(JSONSerializer.java:390) at Serializer_2.write1(Unknown Source) at Serializer_2.write(Unknown Source) at com.alibaba.fastjson.serializer.JSONSerializer.writeWithFieldName(JSONSerializer.java:390) at Serializer_1.write1(Unknown Source) at Serializer_1.write(Unknown Source)
看着也是呵呵了,没有走这条路,因为顺着这条路解决也是没有从根本上解决问题的。
问了其他人,冒出了个游离化(具体本文不做详述)
这个是我之前写的:
public List<T> loadAll() { return getHibernateTemplate().loadAll(entityClass); }
直接给出我游离化后的代码:
public List<T> loadAll() { List<T> list=getHibernateTemplate().loadAll(entityClass); for (T t:list ){ getHibernateTemplate().evict(t); } return list; }
问题就这么愉快的解决了,在此记录下,希望对遇到同类问题的同学有所帮助。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。