#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 решил эту проблему. Итак, до тех пор должна быть ошибка.