Jackson JsonManagedReference和 JsonBackReference注解


prtyaa
prtyaa 2023-12-29 21:44:37 65755
分类专栏: 资讯

在 Hibernate 或者 ORM 映射中,我们可能会存在 1 对多的情况。
在这个时候,如果你使用 Jackson 将对象序列化的时候,就会出现双向引用导致的无限递归(infinite recursion)的情况。
@JsonManagedReference 和 @JsonBackReference 注解就是为了避免这个双向引用的情况。
@JsonBackReference 和 @JsonManagedReference:这两个标注通常配对使用,通常用在父子关系中。
假设我们有 2 个对象。
一个对象是 QIndex 和 QTitle
一个 QIndex 可能对应有多个 QTitle。
那么在 JPA 中的对应关系的 QIndex 应该定义为:
@OneToMany(mappedBy = "qIndex", cascade = CascadeType.ALL, orphanRemoval = true) @OrderBy("questionNumber ASC") @JsonManagedReference private List<QTitle> qTitleList = new ArrayList<>();
在 JPA 的 QTitle 中应该定义为:
@ManyToOne() @JsonBackReference private QIndex qIndex;
在序列化的时候,@JsonManagedReference 注解的属性则会被序列化,@JsonBackReference 的注解将会被忽略。
@JsonManagedReference 注解,通常说明这个字段是一个双向引用的字段,这个字段在这个双向引用中的角色为 “父”,与这个字段对应的引用需要注解为 @JsonBackReference。
@JsonBackReference 注解,通常说明这个字段是关联的一个双向引用字段,这个字段在这个双向引用的角色是 “孩子”。这个字段的值只能是对象(Bean),不能是 集合(Collection),图(Map),数组(Array)和枚举类型(enumeration)。
总结

  • @JsonManagedReference 和 @JsonBackReference 总是成对出现的
  • @JsonManagedReference 定义在父级角色
  • @JsonBackReference 定义在孩子级角色
  • @JsonBackReference 不能使用任何集合和数组等的数据结构

 



有了上面的解释,应该比较容易的理解为了避免双向引用导致无限递归而出现的问题的。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=32284
赞同 0
评论 0 条
prtyaaL0
粉丝 1 发表 2554 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1448
银河麒麟打印带有图像的文档时出错  1365
银河麒麟添加打印机时,出现“server-error-internal-error”  1151
统信桌面专业版【如何查询系统安装时间】  1073
统信操作系统各版本介绍  1070
统信桌面专业版【全盘安装UOS系统】介绍  1028
麒麟系统也能完整体验微信啦!  984
统信【启动盘制作工具】使用介绍  627
统信桌面专业版【一个U盘做多个系统启动盘】的方法  575
信刻全自动档案蓝光光盘检测一体机  483
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!