我在这个项目上工作: https://github.com/s1ddok/todosapp
在这里,您可以找到实体等的所有来源。我尝试做的是在TODO
和USER
之间添加连接。我希望这是一个多对一的关系,因为一个用户可以有多个待办事项,但待办事项只能有一个所有者。
我在MySQL数据库中创建了一个连接表,带有外键等。
这就是在应用程序启动时引发致命错误:
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。究竟我做错了什么?
答案 0 :(得分:0)
您应该在其中一个属性中使用mappedBy,而不是在两个属性中定义关系。从HashSet Todo中删除注释@JoinColumn并将@OneToMany(cascade = CascadeType.ALL)
更改为@OneToMany(mappedBy = "user" , cascade = CascadeType.ALL)
答案 1 :(得分:0)
我有同样的问题,我尝试了不同的方法。如果您的代码中需要两种关系(@OneToMany
和@ManyToOne
)(就像我的情况一样),您应该怎么做?
因此,您应该使用@JsonIgnore
注释来打破循环。问题解决了。就像在this solution
我的回答很晚,但希望能帮助别人!