具有多对多关系的无限递归

时间:2019-04-23 06:51:25

标签: java hibernate relational-database

我在使用Java时遇到此错误会休眠多对多关系:

  

无限递归(StackOverflowError)(通过参考链:

     

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

     

com.company.nms.models.Group [“用户”]-

     

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>();

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

请帮助。谢谢

1 个答案:

答案 0 :(得分:0)

由于双向引用,产生的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注释其中之一。