首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解决hibernate双向映射导致的json序列化中的循环引用?

如何解决hibernate双向映射导致的json序列化中的循环引用?
EN

Stack Overflow用户
提问于 2010-07-27 11:11:50
回答 6查看 95.5K关注 0票数 86

我正在编写一个序列化程序来将POJO序列化为JSON,但是陷入了循环引用的问题。在hibernate的双向一对多关系中,parent引用回父对象的子引用和子引用,这时我的序列化程序就完蛋了。(参见下面的示例代码)

如何打破这个循环?我们可以得到一个对象的所有者树来查看对象本身是否存在于它自己的所有者层次结构中的某个地方吗?有没有其他方法来确定引用是否将是循环的?或任何其他想法来解决这个问题?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-27 11:20:05

双向关系甚至可以用JSON表示吗?某些数据格式不适合某些类型的数据建模。

在处理遍历对象图时,处理循环的一种方法是跟踪到目前为止看到的对象(使用标识比较),以防止自己遍历无限循环。

票数 12
EN

Stack Overflow用户

发布于 2010-07-29 14:12:27

Jackson 1.6 (发布于2010年9月)具有特定的基于注释的支持,用于处理此类父/子链接,请参阅http://wiki.fasterxml.com/JacksonFeatureBiDirReferences。(Wayback Snapshot)

当然,您可以排除已经使用大多数JSON处理包(jackson、gson和flex-json至少支持它)的父链接的序列化,但真正的诀窍在于如何将其反序列化(重新创建父链接),而不仅仅是处理序列化方面。虽然现在听起来只是排除可能对你有用。

编辑(2012年4月):Jackson 2.0现在支持真正的identity references (Wayback Snapshot),所以你也可以这样解决它。

票数 34
EN

Stack Overflow用户

发布于 2014-11-17 18:45:10

我使用了一个类似于亚瑟的解决方案,但没有使用setExclusionStrategies

代码语言:javascript
复制
Gson gson = new GsonBuilder()
                .excludeFieldsWithoutExposeAnnotation()
                .create();

并对json中需要的字段使用了@Expose gson注释,排除了其他字段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3340485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档