Spring mongodb dbref一对多如何实现

时间:2016-02-27 09:43:05

标签: spring mongodb spring-mongo

    @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);

当我试图让两个用户中的一个我挂了程序时, 我认为它是: 用户一加载包含用户二的列表,但用户二包含列表,用户一包含该用户的列表,最后我有循环。 是为链接两个对象创建附加文档的最佳方法???

1 个答案:

答案 0 :(得分:0)

如果您的文档有DBRef,那么当文档加载时,所有文档都会被DBRef引用。

如果User oneDBRefUser two User two有一个DBRefUser one

结果将是一个无限循环(导致你的挂起)。

即。一个加载两个,然后两个加载一个,然后加载两个......

(1 - > 2 - > 1 - > 2 - > 1 - > 2)

虽然我无法想到在任何情况下你想要这个的原因,但可以使用一种名为Manual Referencing的技术来实现这种引用。

这基本上意味着包括与任何其他用户关联的任何用户的_id。这样,当您加载用户时,您只加载一个字符串列表,可用于将每个用户加载到数据库之外。

注意:如果删除用户,则必须在&#34; userReference&#34;中找到该用户的所有出现。字段并删除它们。