我们目前正在尝试迁移到OrientDB 3.0.2。我们有一些在2.2.x中工作但在3.x中不起作用的代码。有问题的代码大致如下:
Map<String, ODocument> children = doc.getProperty("childMap");
ODocument childDoc = children.get("someKey");
这引发了以下异常:
java.lang.ClassCastException:
com.orientechnologies.orient.core.sql.executor.OResultInternal
cannot be cast to
com.orientechnologies.orient.core.record.impl.ODocument
然后,我们更新了代码以使用OResult接口,并使用toElement()来获取OElement实例。但是,此代码在多个地方使用,在测试中我们得到以下异常:
java.lang.ClassCastException:
com.orientechnologies.orient.core.record.impl.ODocument
cannot be cast to
com.orientechnologies.orient.core.sql.executor.OResult
我们很难说儿童地图何时可能包含ODocument以及何时可能包含OResult。在我们的数据库中,我们必须使用大致相同结构的类,除了在子映射中的一个是EMBEDDEDMAP而在另一个情况下它是LINKMAP的事实。这可能是区别吗? EMBEDDEDMAP会返回一个而LINKMAP会返回另一个吗?在orient db 2.x中,返回类型不依赖于子属性的映射类型。似乎这些类没有共同的接口,所以我想我们需要编写一些分支逻辑来处理这两种情况,我们只是不确定逻辑是什么。
任何人都可以对此有所了解吗?