使用嵌入类型时在OrientDB文档API上级联保存

使用嵌入类型时在OrientDB文档API上级联保存,orientdb,nosql,Orientdb,Nosql,考虑到以下测试: //设置 OClass driver=getDatabase().getMetadata().getSchema().createClass(驱动程序); OClass car=getDatabase().getMetadata().getSchema().createClass(car); car.createProperty(DRIVERS,OType.EMBEDDEDLIST,driver); OClass team=getDatabase().getMetadata()

考虑到以下测试:

//设置
OClass driver=getDatabase().getMetadata().getSchema().createClass(驱动程序);
OClass car=getDatabase().getMetadata().getSchema().createClass(car);
car.createProperty(DRIVERS,OType.EMBEDDEDLIST,driver);
OClass team=getDatabase().getMetadata().getSchema().createClass(团队);
team.createProperty(CARS,OType.EMBEDDEDSET,car);
//练习
气味文件阿隆索=新的气味文件(驾驶员)。字段(“姓名”、“费尔南多·阿隆索”)。字段(“国籍”、“西班牙语”)
.菲尔德(“出生年”,1981年);
OdoDocument button=新的OdoDocument(驾驶员)。字段(“姓名”、“简森按钮”)。字段(“国籍”、“英国”)
.field(“出生年”,1980年);
OdoDocument mp30=新的OdoDocument(CAR).field(DRIVERS,Arrays.asList(新的OdoDocument[]{alonso,button}));
Set cars=new HashSet();
添加(mp30);
迈凯轮F1车队的气味文件=新气味文件(车队)。现场(汽车,汽车);
迈凯轮F1车队。保存();
//核实
assertEquals(1,getDatabase().countClass(团队));
assertEquals(1,getDatabase().countClass(CAR));
assertEquals(2,getDatabase().countClass(驱动程序));
第二个断言失败:

java.lang.AssertionError:应为:但为: 位于org.junit.Assert.fail(Assert.java:88) 位于org.junit.Assert.failNotEquals(Assert.java:834) 位于org.junit.Assert.assertEquals(Assert.java:645) 位于org.junit.Assert.assertEquals(Assert.java:631) 位于foo.orientdb.dataaccessapi.StoreJSonIT.testSchemaFull(StoreJSonIT.java:68)

为什么会失败


属性CAR和DRIVER被创建为嵌入列表嵌入集,mclarenF1Team中的单个保存不应该对嵌入文档进行级联保存吗?

嵌入列表/集意味着您创建的文档将嵌入(保存)父文档中,而不是其自己的类/簇中

如果你想达到这种行为,你应该使用链接

看这里


清除。车辆和驾驶员已保存,但在直接浏览课程时无法访问。错误的是断言。汽车和驾驶员不保存在他们的类/集群中,而是保存在所有者文档团队中。如果您改为使用链接,则在团队记录中,它将只保存到Cars文档的链接,此时将保存在他的群集中。如果您希望以这种方式管理关系,则应使用链接集/链接列表。实际上,这只是检查嵌入类型如何工作的测试,我知道预期的结果,但我在写这些断言时完全犯了错误。很明显,car和driver类都必须包含0个文档。