将表连接添加到现有项目会导致无限递归

时间:2016-03-10 19:28:34

标签: java mysql spring hibernate

我在这个项目上工作: https://github.com/s1ddok/todosapp

在这里,您可以找到实体等的所有来源。我尝试做的是在TODOUSER之间添加连接。我希望这是一个多对一的关系,因为一个用户可以有多个待办事项,但待办事项只能有一个所有者。

我在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"]

...

我完全迷失了。我搜索所有相关的问题,并尝试了所有可能的注释变体,但仍然没有luch。究竟我做错了什么?

2 个答案:

答案 0 :(得分:0)

您应该在其中一个属性中使用mappedBy,而不是在两个属性中定义关系。从HashSet Todo中删除注释@JoinColumn并将@OneToMany(cascade = CascadeType.ALL)更改为@OneToMany(mappedBy = "user" , cascade = CascadeType.ALL)

答案 1 :(得分:0)

我有同样的问题,我尝试了不同的方法。如果您的代码中需要两种关系(@OneToMany@ManyToOne)(就像我的情况一样),您应该怎么做?

因此,您应该使用@JsonIgnore注释来打破循环。问题解决了。就像在this solution

中建议的那样

我的回答很晚,但希望能帮助别人!