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 аннотаций.