Spring mongodb dbref一对多如何实现

Spring mongodb dbref one to many how implement

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

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

如果您的文档有一个 DBRef,那么当它被加载时,任何 DBRef 引用的所有文档也会被加载。

所以如果 User one 有一个 DBRefUser two User twoDBRefUser one

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

即一载二,二载一,二载二...

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

虽然我想不出你在任何情况下都想要这个的原因,但可以使用一种称为 Manual Referencing.

的技术来实现这种引用

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

注意:如果删除用户,则必须在 "userReference" 字段中找到该用户的所有匹配项并将其删除。