Я использую Spring Roo, но я думаю, что это не проблема Spring Roo, а проблема MongoDB.
У меня есть два класса (документы), ссылающиеся друг на друга.
public class Dummy {
private String dummyString;
@DBRef
private Dummy2 dummy2;
}
public class Dummy2 {
private String dummyString;
private ObjectId dummyId;
}
«Dummy» относится к «Dummy2» по ссылке.«Dummy2» ссылается на «Dummy», сохраняя ObjectId вручную по техническим причинам.
Вот мой интеграционный тест, создающий два объекта.
@Test
public void testDummyWithDummy2() {
DummyDataOnDemand dod = new DummyDataOnDemand();
Dummy dummy = dod.getNewTransientDummy(0);
dummyService.saveDummy(dummy);
Dummy2DataOnDemand dod2 = new Dummy2DataOnDemand();
Dummy2 dummy2 = dod2.getNewTransientDummy2(0);
dummy2.setDummyId(dummy.getId());
dummy2Service.saveDummy2(dummy2);
dummy.setDummy2(dummy2);
dummyService.updateDummy(dummy);
}
Я обнаружил, что результаты являются несоответствиями.Пока что есть две ситуации.
Работает правильно.Они относятся друг к другу, как и ожидалось.Пустышка:
{
"_id": ObjectId("4ecfa5429418d09a94f1c8ae"),
"_class": "com.mytest.model.Dummy",
"dummyString": "dummyString_0",
"dummy2": {
"$ref": "dummy2",
"$id": ObjectId("4ecfa5429418d09a94f1c8af")
}
}
Пустышка2:
{
"_id": ObjectId("4ecfa5429418d09a94f1c8af"),
"_class": "com.mytest.model.Dummy2",
"dummyString": "dummyString_0",
"dummyId": ObjectId("4ecfa5429418d09a94f1c8ae")
}
Иногда пустышка ссылается на ничто, а пустышка2 ссылается на недопустимый идентификатор объекта.Пустышка:
{
"_id": ObjectId("4ecfa039941836a18fe88b24"),
"_class": "com.mytest.model.Dummy",
"dummyString": "dummyString_2147483647"
}
Пустышка2:
{
"_id": ObjectId("4ecfa039941836a18fe88b23"),
"_class": "com.mytest.model.Dummy2",
"dummyString": "dummyString_0",
"dummyId": ObjectId("4ecfa039941836a18fe88b22")
}
Интересно, почему может произойти последний результат?Кажется, что Dummy - это не то же самое, что Dummy2, на что он ссылается.Но где находится Dummy с ObjectId ("4ecfa039941836a18fe88b22")?Это потеряно?Почему?
Roo: 1.2.0.M1 [rev 1fa252f]MongoDB: 2.0.1