开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
  1. Home
  2. Computer Science
  3. This article

Jackson 的 JsonManagedReference 和 JsonBackReference 注解

2020年10月11日 930Browse 0Like 0Comments

在 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 不能使用任何集合和数组等多的数据结构

 

0704-bidirectional-relationship-in-json-Waldek_Social-5597e125cb4152ba5842ffe95675b5a4

 

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

https://www.ossez.com/t/jackson-jsonmanagedreference-jsonbackreference/574

 

Tags: None
Last updated:2024年08月29日

HoneyMoose

有温度的人文和独立的思考

Like
< Previous
Next >

Comments

Cancel reply

Archives
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,362)
    • Confluence (663)
    • Gradle (12)
  • U.S. (482)
  • 文化旅游 (145)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1