Бесконечная рекурсия со многими отношениями ко многим - PullRequest
0 голосов
/ 23 апреля 2019

У меня возникла эта ошибка в связи между гибернацией Java и многими многими:

Бесконечная рекурсия (StackOverflowError) (через цепочку ссылок:

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

com.company.nms.models.Group [ "пользователи"] -

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

com.company.nms.models.User [ "группа"]

Я проверил отношения, но все еще имею эту ошибку.

В моем 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 Ответ

1 голос
/ 23 апреля 2019

Произведенный JSON имеет бесконечную глубину из-за двунаправленной ссылки. Вы можете ограничить вывод json с помощью аннотаций @JsonManagedReference и @JsonBackReference:

@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.

...