@DBRef的无限递归问题(lazy = true)

时间:2017-05-21 04:33:55

标签: java spring mongodb spring-data spring-data-mongodb

我有以下课程:

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阻止了这个,有人知道我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

Spring Data Mongo上存在一个问题,它讨论了默认情况下使DbRefs变为惰性的选项,以避免此类堆栈溢出。它还引用了另外两个触发相同无限递归的问题:

  只有当DBRef(无论是否是懒惰的)放在构造函数中时,才会发生StackOverflow异常。

不确定“仅”是否是拼写错误。和

  

如果有人在其@Document实体中覆盖可能触发DBRef解析的Object方法(“equals”,“hashCode”或“toString”)

因此,问题的一个可能原因是,其他东西正在触发递归解决方案。

您可能会通过检查堆栈跟踪的顶部找到罪魁祸首。

<强>更新

根据您的评论,这似乎与Spring Data无关,但与Jackson有关。

在SO上实际上有答案如何解决这个问题。这听起来很有希望https://stackoverflow.com/a/4126846/66686