我在使用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>();
预期结果应该是用户与组之间的多对多关系。
请帮助。谢谢
答案 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
注释其中之一。