@JsonManagedReference和@JsonBackReference无法从jsonbackreference模型中获取关联数据。

huangapple go评论95阅读模式
英文:

@JsonManagedReference and @JsonBackReference cannot get relation data from jsonbackreference model

问题

我有一个关于用户和角色的关系,其中角色与“一对多”关系,用户与“多对一”关系,列名为“role_id”。

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

但是,当我在角色模型上使用@JsonManagedReference(用于角色)和@JsonBackReference(用于用户)时,角色模型可以按照我想要的方式工作。就像这个截图:

@JsonManagedReference和@JsonBackReference无法从jsonbackreference模型中获取关联数据。

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

@JsonManagedReference和@JsonBackReference无法从jsonbackreference模型中获取关联数据。

我想要的是,当我获取角色数据时,与我想要的一样(第一个截图),当我从用户获取数据时,我希望数据像这个截图一样:

@JsonManagedReference和@JsonBackReference无法从jsonbackreference模型中获取关联数据。

这是我的角色模型:

  1. public class Role {
  2. /*
  3. 其他数据
  4. */
  5. @JsonManagedReference(value = "user-role")
  6. @OneToMany(
  7. cascade = CascadeType.ALL,
  8. mappedBy = "role"
  9. )
  10. private List<User> users = new ArrayList<>();
  11. }

这是我的用户模型:

  1. public class User {
  2. /*
  3. 其他数据
  4. */
  5. @JsonBackReference(value = "user-role")
  6. @ManyToOne
  7. @JoinColumn(name="role_id")
  8. @OnDelete(action = OnDeleteAction.CASCADE)
  9. private Role role;
  10. }

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

英文:

i have a relationship from user and role where role have "one to many" relation and user have "many to one" relation with column "role_id"

when i use relationship on spring boot i got infinite loop data when i use @OneToMany and @ManyToOne so i search and i get @JsonManagedReference and @JsonBackRefence. that solved my problem for inifinite loop.

but when i use @JsonManagedReference(for role) and @JsonBackRefence(for user), for role model that work with what i want. like this screenshot :

@JsonManagedReference和@JsonBackReference无法从jsonbackreference模型中获取关联数据。

but in user model, there are no role data, like this screenshot
@JsonManagedReference和@JsonBackReference无法从jsonbackreference模型中获取关联数据。

what i want is when i get the role data same as what i want (1 screenshot) and when i get data from user, i want the data like this screenshot :
@JsonManagedReference和@JsonBackReference无法从jsonbackreference模型中获取关联数据。

this is my role model :

  1. public class Role {
  2. /*
  3. another data
  4. */
  5. @JsonManagedReference(value = &quot;user-role&quot;)
  6. @OneToMany(
  7. cascade = CascadeType.ALL,
  8. mappedBy = &quot;role&quot;
  9. )
  10. private List&lt;User&gt; users = new ArrayList&lt;&gt;();
  11. }

and my user model :

  1. public class User {
  2. /*
  3. another data
  4. */
  5. @JsonBackReference(value = &quot;user-role&quot;)
  6. @ManyToOne
  7. @JoinColumn(name=&quot;role_id&quot;)
  8. @OnDelete(action = OnDeleteAction.CASCADE)
  9. private Role role;
  10. }

i have searched many time in stackoverflow and other website but i didn't find any solution, can you help me to solve my problem, thanks a lot.

答案1

得分: 2

@JsonManagedReference(for User) 和 @JsonBackReference(for Role) 需要添加在另一种方式中,简而言之,@JsonBackReference 会忽略任何地方添加的引用。您可以参考此处了解更多详细信息,或者查看此处的演示,其中包含不同的用例。

英文:

You need to add annotation other way around

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

in short, @JsonBackRefence will ignore were ever added.

You can refer this for more detail

Or see a Demo here with the different use cases.

答案2

得分: 1

尝试这样做:

  1. @JsonManagedReference(value = "user-role")

  1. @JsonBackReference(value = "user-role")

来精确指定应该被管理的引用。

英文:

It looks like you are not providing the value of the @JsonManagedReference

Try doing this:

  1. @JsonManagedReference(value = &quot;user-role&quot;)

and

  1. @JsonBackReference(value = &quot;user-role&quot;)

To exactly specify which reference should be managed.

huangapple
  • 本文由 发表于 2020年1月6日 18:25:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/59610391.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定