@Document(collection = "users")
public class User {
@Id
private String id;
@DBRef(lazy = true)
private Set<User> following = new HashSet<>();
}
例如我做那样的事情
User one = new User();
User two = new User();
one.follow(two);
userRepository.save(one);
这一刻,一切正常。但在那之后
two.follow(one);
userRepository.save(two);
当我试图让两个用户中的一个我挂了程序时, 我认为它是: 用户一加载包含用户二的列表,但用户二包含列表,用户一包含该用户的列表,最后我有循环。 是为链接两个对象创建附加文档的最佳方法???
答案 0 :(得分:0)
如果您的文档有DBRef
,那么当文档加载时,所有文档都会被DBRef
引用。
如果User one
有DBRef
到User two
User two
有一个DBRef
到User one
结果将是一个无限循环(导致你的挂起)。
即。一个加载两个,然后两个加载一个,然后加载两个......
(1 - > 2 - > 1 - > 2 - > 1 - > 2)
虽然我无法想到在任何情况下你想要这个的原因,但可以使用一种名为Manual Referencing
的技术来实现这种引用。
这基本上意味着包括与任何其他用户关联的任何用户的_id。这样,当您加载用户时,您只加载一个字符串列表,可用于将每个用户加载到数据库之外。
注意:如果删除用户,则必须在&#34; userReference&#34;中找到该用户的所有出现。字段并删除它们。