我正在使用 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”通过手动存储 ObjectId 来指代“Dummy”。
这是我创建两个对象的集成测试。
@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") }
有时, dummy 指的是空,而 dummy2 指的是无效的 ObjectId。
假的:{ "_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 不一样,看起来像新创建的 Dummy。但是带有 ObjectId("4ecfa039941836a18fe88b22") 的 Dummy 在哪里?它丢失了吗?为什么?
Roo:1.2.0.M1 [rev 1fa252f]
MongoDB:2.0.1