DBRefs (ссылки на документы Mongo) не извлекаются быстро

#java #spring #mongodb #spring-data #spring-data-document

#java #весна #mongodb #spring-данные #spring-data-document

Вопрос:

Я использую Mongo в его простейшем из возможных вариантов отображения (в сочетании с данными Spring).

У меня есть две сущности (первого класса) (@Documents) A и B, где A содержит ссылку (@DBRef) на B внутри него. Все работает нормально при создании A и B. Однако при чтении объекта A (по идентификатору) ссылка B всегда нулевая.

Я считаю, что DBRefs по умолчанию извлекаются с готовностью (см. http://static.springsource.org/spring-data/data-document/docs/current/reference/html/#mapping-usage-references ), но поведение в настоящее время противоречит этому. Есть идеи, почему?

Комментарии:

1. У меня такая же проблема с RC1. Через оболочку я вижу правильный dbref , но при загрузке ссылка всегда равна нулю. Вы обновили библиотеку?

Ответ №1:

Вы правы, любые DBRefs извлекаются с готовностью, но они не сохраняются с готовностью (AFAIK). Если A имеет ссылку на B, при сохранении A Spring Data / MongoDB не сохраняет B автоматически, вам придется.

 // Incorrect, upon retrieval a.getB() == null
A a = new A();
a.setB(new B());
repositoryA.save(a);

// Correct (to the best of my knowledge)
B b = repositoryB.save(new B());
A a = new A();
a.setB(b);
repositoryA.save(a);
  

Комментарии:

1. да, я, кажется, понял это. То, что я сейчас ищу, — это способ / шаблон для извлечения объектов, на которые ссылаются. Итак, вы можете извлечь ‘A’, используя findOne (a_id), но как вы извлекаете B?

2. Это должно быть там, когда вы извлекаете A, как вы и ожидали. Я не знаю ни о какой причине (кроме той, что указана в моем ответе), по которой A должен содержать нулевую ссылку на B. Вы пробовали использовать mongo клиент командной строки для подключения к серверу и запуска запроса? Затем вы можете увидеть, присутствует ли DBRef в B в каких-либо объектах A.

Ответ №2:

Переход к сборке Spring Data Mongo M5 решил эту проблему. Итак, до тех пор должна быть ошибка.