2016-02-27 7 views
0
@Document(collection = "users") 
    public class User { 

     @Id 
     private String id; 

     @DBRef(lazy = true) 
     private Set<User> following = new HashSet<>(); 
} 

Например я бы somethink как тоSpring MongoDB dbref один ко многим, как реализовать

User one = new User(); 
User two = new User(); 
one.follow(two); 
userRepository.save(one); 

На данный момент, все работает правильно. Но после этого

two.follow(one); 
userRepository.save(two); 

Когда я пытаюсь получить один из двух пользователей я висевшая программу, я думаю, что его Couse что: Пользователь один нагруженный список, содержащий пользователь два, но пользователь два содержит список с пользователем одного который содержит список с этим пользователем и, наконец, у меня был цикл. Лучше всего создать дополнительный документ для ссылки на два объекта ???

ответ

0

Если у вашего документа есть DBRef, тогда, когда он загружен, все документы, на которые ссылаются любые DBRef.

Так что если User one имеет DBRef к User two и User two имеет DBRef к User one

результат будет бесконечный цикл (в результате вашего похмелья).

т.е. один груз два, два загружает один, который в свою очередь, загружает два ...

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

Хотя я не могу подумайте о причине, в которой вы хотите этого, в любой ситуации можно добиться такого рода ссылок, используя метод, называемый Manual Referencing.

В основном это означает, что _id любых Пользователей, связанных с любыми другими пользователями. таким образом, когда вы загружаете пользователя, вы загружаете только список строк, которые могут быть использованы для загрузки каждого пользователя из базы данных.

Примечание: Если вы удалите пользователя, вам нужно будет найти все вхождения этого пользователя в поле «userReference» и удалить их.

+0

Thx, отличный ответ;) – BabyGluk

+0

@BabyGluk спасибо, см. Https://docs.mongodb.org/manual/reference/database-references/#manual-references для получения дополнительной информации! – Hughzi