2015-03-27 3 views
14

Название этого вопроса весьма противоречиво, так как я пытаюсь реализовать отношения в не-реляционной базе данных ... :)Spring Data MongoDB: как реализовать «отношения сущностей»?

Но то, что я имею в виду, как определить ассоциации между сущностями в модели классов приложений работая с MongoDB.

Работа с JPA Я часто использую @ManyToMany или @OneToMany аннотации для определения отношений между объектами. Есть ли что-то подобное в Spring Data MongoDB?

Изучение MongoDB я понял, что есть два возможных подхода к ассоциации: Ссылки и Embedded Data.

Какой из них используется данными весны? Можно ли настроить режим ассоциации?

ответ

9

Вы можете использовать аннотацию @DBRef для сохранения ссылочного класса в отдельной коллекции, иначе документ будет сохранен в том же документе (json). Использование DBRef требует дополнительного запроса для драйвера mongodb, вы должны подумать об этом, чтобы проанализировать проблемы с производительностью.

От spring data documentation

@DBRef - применяется на поле, чтобы указать его следует хранить с использованием com.mongodb.DBRef.

7.3.4 Использование DBRefs Рамки сопоставления не должны хранить дочерние объекты, встроенные в документ. Вы также можете хранить их отдельно и использовать DBRef для ссылки на этот документ. Когда объект загружается из MongoDB, эти ссылки будут с нетерпением разрешены, и вы вернете сопоставленный объект, который выглядит так же, как если бы он был сохранен в встроенном документе.

+2

Будьте осторожны с @DBRef. Вы не сможете использовать прогнозы для ссылочных документов. То есть 'docA = {id: 1, anotherDoc: DBRef (id: 2)}' и 'docB = {id: 2, foo: bar}'. Теперь вы можете использовать проекцию при запросе 'docA', но я не буду обращаться к' docB'. Я имею в виду, что вы ** не можете делать что-то подобное этой проекции '{anotherDoc.foo:0}'. Он всегда будет извлекать весь файл 'docB'. –

Смежные вопросы