GORM: Что такое reference:true в блоке сопоставления классов предметной области Grails?

public class Address {
    static mapWith = "mongo"

    Region region;
    Zone zone;

    static mapping = {
        id generator: 'identity'
        region reference:true
        zone reference:true
    }
}

Мне интересно узнать, что делает reference:true.

По моему опыту, отключение этого параметра дает точно такой же результат, за исключением того, что в фактическом документе mongo нет DBRef.


person Alexander Suraphel    schedule 12.05.2015    source источник


Ответы (2)


Похоже, что reference контролирует, как документы связаны.

Когда true, на связанные документы ссылаются db-refs, если false, GORM вставляет простой id, он же Manual references в монго

person injecteer    schedule 10.06.2015
comment
Инжектор спасибо! Есть ли какие-либо преимущества в том, что документы ссылаются на db-refs с GORM? В руководстве говорится, что если у вас нет веских причин для использования DBRefs, вместо этого используйте ручные ссылки. - person Alexander Suraphel; 10.06.2015
comment
из того же документа: By including these names, DBRefs allow documents located in multiple collections to be more easily linked with documents from a single collection. поэтому, если вам нужно связать документы из одной коллекции, ручные ссылки вполне подойдут. - person injecteer; 10.06.2015
comment
Но эту информацию можно найти в определении класса предметной области. Итак, GORM знает, какую коллекцию искать, видя класс поля, верно? - person Alexander Suraphel; 10.06.2015
comment
В целом оба варианта работают, но я думаю, что db-ref мог бы быть лучше оптимизирован - person injecteer; 10.06.2015
comment
@AlexanderSuraphel Также взгляните на этот поток, чтобы узнать, почему использование ссылок в mongodb не является хорошей идеей. - person Merhawi Fissehaye; 04.09.2015

Это означает, что эти свойства будут храниться в вашей адресной записи по ссылке. Идентификатор для региона и идентификатор для зоны будут существовать в записи при запросе к базе данных вместо сохранения всего сопоставления объекта и любых объектов, которые могут содержаться в этом сопоставлении. Возврат объекта Address будет выглядеть примерно так:

{
  "id": "2413",
  "region": DBRef("region", "1234"),
  "zone": DBRef("zone", "4321")
}

Для невстроенных ассоциаций по умолчанию GORM для MongoDB сопоставляет ссылки между документами, используя ссылки базы данных MongoDB, также известные как DBRefs. Если вы предпочитаете не использовать DBRefs, вы указываете GORM использовать прямые ссылки, используя сопоставление reference:false.

Gorm Mapping
Справочник с возможностью поиска

person dspano    schedule 12.05.2015
comment
Ссылка, которую вы дали, касается Searchable, о котором я не упомянул. - person Alexander Suraphel; 14.05.2015
comment
Я обновил ответ, чтобы показать ссылку на более релевантный контент. Ссылка с возможностью поиска использует сопоставление reference:true так же, как сопоставление Gorm. Я думал, что концепция может быть получена из этой доступной для поиска ссылки, несмотря на то, что ответ тот же. - person dspano; 27.05.2015