Как отобразить коллекции в mongodb, используя datanucleus / jdo? - PullRequest
0 голосов
/ 23 июля 2011

Я пытаюсь сопоставить существующую базу данных mongodb с объектами домена, используя datanuclues (3.0.0-m6) / JDO.

В БД есть документы, такие как:

collection A: {_id: ..., field1: ...}
collection B: {_id: ..., a: ..., field3: ...}

Это должно быть сопоставлено с:

class A {
    // id ....
    String field1;
    List<B> bs;
}

class B {
    A a;
    Double field3;
}

Это похоже на 1-N двунаправленное отношение с использованием Foreign-Key , как описано в документации к datanuclues.

Package.jdo:

<package name="my.domain">
      <class name="A" table="A" identity-type="application">
        <field name="id" primary-key="true"/>
        <field name="bs" persistence-modifier="persistent" mapped-by="a">
            <collection element-type="my.domain.B" />
            <element column="a"/>
        </field>
    </class>
    <class name="B" table="B" identity-type="datastore" >
        <datastore-identity strategy="identity" />
        <field name="a" persistence-modifier="persistent">
            <column name="a"/>
        </field>
    </class>
</package>

Это работает, как и ожидалось, при использовании реляционной БД (например, Derby). Однако при использовании mongodb datanucleus используется коллекция в документе A, содержащая идентификаторы связанных B:

collection A: {_id: ..., field1: ..., bs: [...]}

, который не совместим с существующей схемой.

Как мне настроить такое отношение для mongodb? Datanucleus различает Set и List для отношений (я тестировал оба), Set может быть приемлемым, если это облегчит сопоставление.

1 Ответ

1 голос
/ 23 июля 2011

Текущее поведение DataNucleus 1-N - это все, что мы поддерживаем ... т.е. помещаем дочерние идентификаторы в родительский. Документ, на который вы ссылаетесь, - «ORM», а MongoDB не является реляционным (поэтому в любом случае не имеет «внешних ключей»). Очевидно, что вы можете создать JIRA, чтобы добавить поддержку этого режима, а также прикрепить патч для его предоставления.

...