码迷,mamicode.com
首页 > Web开发 > 详细

从循环引用到hibernate的游离化

时间:2015-03-18 20:40:29      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

问题描述:

列表页面,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;
}

问题就这么愉快的解决了,在此记录下,希望对遇到同类问题的同学有所帮助。


从循环引用到hibernate的游离化

标签:

原文地址:http://my.oschina.net/nyp/blog/388565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!