【问题标题】:@JsonManagedReference and @JsonBackReference cannot get relation data from jsonbackreference model@JsonManagedReference 和 @JsonBackReference 无法从 jsonbackreference 模型中获取关系数据
【发布时间】:2020-04-23 21:30:02
【问题描述】:

我与用户和角色有关系,其中角色具有“一对多”关系,用户与“role_id”列具有“多对一”关系

当我在 Spring Boot 上使用关系时,当我使用 @OneToMany 和 @ManyToOne 时,我得到了无限循环数据,所以我搜索并得到了 @JsonManagedReference 和 @JsonBackRefence。这解决了我的无限循环问题。

但是当我使用@JsonManagedReference(用于角色)和@JsonBackRefence(用于用户)时,我想要的角色模型。像这样的截图:

但是在用户模型中,没有角色数据,就像这个截图

我想要的是当我获得与我想要的角色数据相同的角色数据时(1 个屏幕截图),当我从用户那里获得数据时,我想要这样的数据截图:

这是我的榜样:

public class Role {
/*
    another data
*/
   @JsonManagedReference(value = "user-role")
   @OneToMany(
           cascade = CascadeType.ALL,
           mappedBy = "role"
   )
   private List<User> users = new ArrayList<>();
}

和我的用户模型:

public class User {
   /*
      another data
   */
   @JsonBackReference(value = "user-role")
   @ManyToOne
   @JoinColumn(name="role_id")
   @OnDelete(action = OnDeleteAction.CASCADE)
   private Role role;
}

我在stackoverflow和其他网站上搜索了很多次,但我没有找到任何解决方案,你能帮我解决我的问题吗,非常感谢。

【问题讨论】:

    标签: spring spring-boot jpa spring-data-jpa jackson


    【解决方案1】:

    您似乎没有提供@JsonManagedReference 的值

    尝试这样做:

    @JsonManagedReference(value = "user-role")
    

    @JsonBackReference(value = "user-role")
    

    准确指定应该管理哪个引用。

    【讨论】:

      【解决方案2】:

      您需要以其他方式添加注释

      @JsonManagedReference(for User) and @JsonBackRefence(for Role)
      

      简而言之,@JsonBackRefence 将忽略已添加。

      你可以参考这个more detail

      或在此处查看Demo 的不同用例。

      【讨论】:

      • 这并不能解决我的问题,当我得到“用户”数据时,我有用户的“角色”数据,但是当我得到“角色”数据时,我没有得到角色的“用户”列表跨度>
      • 哦,所以您期望以两种方式获取数据。好吧,至少用这种方法是不可能的。
      猜你喜欢
      • 2015-09-27
      • 2021-11-15
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多