我有以下课程:
public class Person
{
@Id
ObjectId Id;
String name;
@DBRef(lazy = true)
List<Entity> entities;
/* Getters and setters omitted for brevity. */
}
public class Entity
{
@Id
ObjectId Id;
String entityName;
@DBRef(lazy = true)
List<Person> people;
/* Getters and setters omitted for brevity. */
}
现在,由于某种原因,当我尝试使用这些链接时,我得到一个无限循环...我认为lazy = true阻止了这个,有人知道我做错了什么吗?
答案 0 :(得分:0)
Spring Data Mongo上存在一个问题,它讨论了默认情况下使DbRefs变为惰性的选项,以避免此类堆栈溢出。它还引用了另外两个触发相同无限递归的问题:
只有当DBRef(无论是否是懒惰的)放在构造函数中时,才会发生StackOverflow异常。
不确定“仅”是否是拼写错误。和
如果有人在其@Document实体中覆盖可能触发DBRef解析的Object方法(“equals”,“hashCode”或“toString”)
因此,问题的一个可能原因是,其他东西正在触发递归解决方案。
您可能会通过检查堆栈跟踪的顶部找到罪魁祸首。
<强>更新强>
根据您的评论,这似乎与Spring Data无关,但与Jackson有关。
在SO上实际上有答案如何解决这个问题。这听起来很有希望https://stackoverflow.com/a/4126846/66686