我有一个关于将orientDB用于JSON数据的问题。在我的场景中, 我收到序列化为JSON的实体。这个JSON数据应该 存储在orientDB中。相关代码部分用于创建文档 在orientDB中看起来如下:
//JSON string created by using Jackson
String jsonStr = "...";
//here some dummy name "test"
ODocument doc = new ODocument("test");
doc.fromJSON(jsonStr);
doc.save();
在下文中,我举例说明了我正在使用的课程 (我遗漏了建造者,吸气剂和制定者以及其他领域 与示例无关):
class AbstractEntity {
private String oidString;
}
class A extends AbstractEntity {
private List<B> bs;
}
class B extends AbstractEntity {
private List<C> cs;
}
class C extends AbstractEntity {
private List<D> ds;
}
class D extends AbstractEntity {
private int type;
}
由于班级使用类型列表,杰克逊需要存储 JSON表示中的其他类型信息也是如此 正确地反序列化数据。
{
"oidString" : "AAA_oid1",
"bs" : [ "java.util.ArrayList", [ {
"oidString" : "b_oid1",
"cs" : null
}, {
"oidString" : "b_oid2",
"cs" : [ "java.util.ArrayList", [ {
"oidString" : "c_oid1",
"ds" : [ "java.util.ArrayList", [ ] ]
}, {
"oidString" : "c_oid2",
"ds" : [ "java.util.ArrayList", [ {
"oidString" : "d_oid1",
"type" : 2
} ] ]
} ] ]
} ] ]
}
但是,如果我尝试例如,我在查询此类文档时遇到问题找到包含特定类型的所有D实例。我试图通过首先列出可以为特定A找到的所有D实例来简化我的查询:
OQuery<?> query = new OSQLSynchQuery<ODocument>(
"select bs.cs.ds from test where oidString = 'AAA_oid1'"
);
返回:{&#34; @ type&#34;:&#34; d&#34;,&#34; @ rid&#34;:&#34;# - 2:0&#34;,& #34; @版本&#34;:0,&#34; BS&#34;:[NULL,NULL]}
其他类型信息(&#34; java.util.ArrayList&#34;)似乎会导致orientDB出现问题。如果我重写我的例子并且只直接使用ArrayList,那么,省略了附加的类型信息,上面的查询显示了一些结果。
这个问题有一般解决方案吗?我必须使用JSON数据,并且JSON数据将包含其他类型信息(必须)。 在这种情况下无法处理orientDB吗?