2016-03-10 3 views
0

Я работаю над этим проектом: https://github.com/s1ddok/todosappДобавление таблицы присоединяется к существующему проекту вызывает бесконечной рекурсии

Здесь Вы можете найти все источники для лица и т.д. То, что я пытаюсь сделать, это добавить соединение между TODO и USER , Я хочу, чтобы это было отношением «много к одному», поскольку один пользователь может иметь несколько todos, но todos может иметь только одного владельца.

Я создал таблицы объединения в моей базе данных MySQL с внешними ключами и т.д.

Затем я добавил следующие аннотации: enter image description here

enter image description here

И это поднимает фатальную ошибку по применению Старт:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError) (through reference chain: sample.todosapp.spring.domain.User["todos"]->org.hibernate.collection.internal.PersistentSet[0]->sample.todosapp.spring.domain.Todo["user"]->sample.todosapp.spring.domain.User["todos"]->org.hibernate.collection.internal.PersistentSet[0]->sample.todosapp.spring.domain.Todo["user"]->sample.todosapp.spring.domain.User["todos"]->org.hibernate.collection.internal.PersistentSet[0]->sample.todosapp.spring.domain.Todo["user"]->sample.todosapp.spring.domain.User["todos"]->org.hibernate.collection.internal.PersistentSet[0]->sample.todosapp.spring.domain.Todo["user"]->sample.todosapp.spring.domain.User["todos"] 

......

Я полностью потерян. Я ищу все связанные вопросы и пробовал все возможные варианты аннотации, но до сих пор не знаю. Что именно я сделал не так?

+0

Я изменил тип выборки на .LAZY, и теперь он компилируется и запускается, но проблема все еще существует – s1ddok

ответ

0

Вы должны использовать mappedBy в одном из ваших атрибутов и не определять отношения в обоих из них. Удалите аннотацию @JoinColumn из HashSet Todo и измените @OneToMany(cascade = CascadeType.ALL) на @OneToMany(mappedBy = "user" , cascade = CascadeType.ALL)

0

У меня была та же проблема, и я попробовал другой подход. Если вам нужны оба отношения (@OneToMany и @ManyToOne) в вашем коде (например, в моем случае), что вам делать?

Итак, вы должны использовать аннотацию @JsonIgnore, чтобы разбить цикл. И проблема была решена. Как это предложено в this solution

Мой ответ опаздывает, но надеюсь помочь кому-то еще!

Смежные вопросы