为OrientDB定义查询 - 使用JSON数据

时间:2015-05-10 19:10:36

标签: orientdb

我有一个关于将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吗?

0 个答案:

没有答案