Я пытаюсь сопоставить существующую базу данных 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 может быть приемлемым, если это облегчит сопоставление.