你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / 数据库开发
Jackson的@JsonIdentityInfo注解和mybatis等orm框架的循环嵌套问题的解决方法
 

我也遇到这个问题,报错com.fasterxml.jackson.databind.JsonMappingException: Direct self-reference leading to cycle,使用了Jackson的@JsonIdentityInfo注解到实体类上解决的。

@JsonIdentityInfo

2.0+版本新注解,作用于类或属性上,被用来在序列化/反序列化时为该对象或字段添加一个对象识别码,通常是用来解决循环嵌套的问题,比如数据库中的多对多关系,通过配置属性generator来确定识别码生成的方式,有简单的,配置属性property来确定识别码的名称,识别码名称没有限制。

初步分析是orm框架在把实体类和数据库映射的过程中产生了循环问题(但是我的实体类只有一个,没有两个类互相引用,可能是其他表的带来的自引用,比如一个用户关注另一个用户,待探究),

在映射(我也不懂为什么这里要持久化,orm框架需要这样做吗?但这是唯一能循环的地方了)我的联表查询操作(user和concern,用户表和关注关系表)的过程中,由于外键导致的自引用,使得user的实体类对象(应该是代理)自己引用了自己,这里应该是两个不同的外键代表的两个不同用户之间的关系,但是mybatis代理类的对象却无法区分这种关系,导致了自引用的循环。

也是这也是为什么加上了Jackson的识别码之后导致问题被解决。

疑惑的地方在于:

1、mybatis查询返回的是否是自己产生的代理user对象?

2、用户表和关系表在这里构成了一种循环,自引用,(虽然只是外键)虽然后来加上了序列号问题解决了,但是序列号没有改变这种本质的循环关系,这种关系是否有问题?mybatis是怎么处理这种自引用的?

3、问题是用@JsonIdentityInfo注解解决的,说明orm框架在某个地方进行序列化得时候无法准确识别对象,这是在哪一步?为什么需要序列化这个对象?

4、循环嵌套指的是哪个地方的循环?如果不嵌套,只是主外键关系还有这种问题吗?

5、orm报错是不是因为一个类的代理对象只有一个,导致多个对象不能很好区分导致的循环问题?

以上是根据能得到信息做出的一些假设和判断,如有错误,跪求指正。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089