【问题标题】:Infinite recursion with many to many relationship具有多对多关系的无限递归
【发布时间】:2019-09-12 07:36:29
【问题描述】:

Java hibernate 多对多关系出现此错误:

无限递归(StackOverflowError)(通过引用链:

org.hibernate.collection.internal.PersistentBag[0]-

com.company.nms.models.Group["users"]-

org.hibernate.collection.internal.PersistentBag[0]-

com.company.nms.models.User["groups"]

我已经检查了关系,但仍然有这个错误。

在我的 User.java 中,我有:

@ManyToMany(mappedBy = "users", fetch = FetchType.EAGER)
     List<Group> groups = new ArrayList<Group>();

在 Group.java 中,我有:

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
     @JoinTable(name = UserConstants.REFERENCE_GROUP_USER,
     joinColumns = {@JoinColumn(name = "user_group_id")},
     inverseJoinColumns = {@JoinColumn(name = "user_id")}
     )
     List<User> users = new ArrayList<User>();

预期的结果应该是用户和组之间的多对多关系。

请帮忙。谢谢

【问题讨论】:

  • 什么时候抛出?
  • 当我查看网页时。

标签: java json database hibernate hibernate-mapping


【解决方案1】:

由于双向引用,生成的 json 具有无限深度。您可以通过使用@JsonManagedReference@JsonBackReference 注释来限制json 的输出:

@ManyToMany(mappedBy = "users", fetch = FetchType.EAGER)
@JsonBackReference
List<Group> groups = new ArrayList<Group>();

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = UserConstants.REFERENCE_GROUP_USER,
 joinColumns = {@JoinColumn(name = "user_group_id")},
 inverseJoinColumns = {@JoinColumn(name = "user_id")}
)
@JsonManagedReference
List<User> users = new ArrayList<User>();

或者用@JsonIgnore注释其中一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多