【发布时间】:2017-05-18 04:47:53
【问题描述】:
好的,所以我的 Spring 应用程序中有一组非常简单的 Java POJO。
这是我的person类:
@Document(collection="people")
public class Person {
// Data.
@Id
private ObjectId Id;
@DBRef
private List<Entity> entities;
/* Getters and setters removed to keep this question simple. */
}
还有,这是我的实体类。
@Document(collection = "entities")
public class Entity {
@Id
private ObjectId Id;
@DBRef
private List<Person> people;
/* Getters and setters removed to keep question simple. */
}
现在,在我的规范中,“Person”和“Entity”具有多对多关系。一个人可以注册到很多实体,反之亦然。
现在,由于某种原因,当我尝试将这两个持久化到彼此的列表中时,我得到了这个我从未见过的奇怪错误:
2017-05-17 23:37:51.966 ERROR 29918 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : 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 content: Infinite recursion (StackOverflowError) (through reference chain: restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]->java.util.ArrayList[0]->restServer.dto.Person["entity"]->restServer.dto.Entity["people"]
... This continues until the stack overflows. Sorry it is all on one line, wasn't sure how to fix that on this site... it is cut straight from my terminal.
我做错了什么?到目前为止,我在学习这个堆栈方面做得很好,但我看不出这里有什么问题。
【问题讨论】:
-
是的,这种情况肯定会发生。您可以通过注释您的 List
人员来处理它; & 列出 实体;使用 @DBRef(lazy = true) 而不是 @DBRef -
太棒了,谢谢,实际的区别是什么?
-
检查我的答案
标签: java spring mongodb spring-data spring-data-mongodb