Spring Data MongoDB: как реализовать "отношения сущностей"?

Название этого вопроса довольно противоречиво, так как я пытаюсь реализовать отношения в нереляционной базе данных... :)

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

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

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

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

Ответ 1

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

Из весенней документации

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

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

Ответ 2

Вы можете использовать структуру RelMongo, которая позволяет осуществлять отношения, предоставляя поддержку @OneToMany и @OneToOne аннотаций.