2012-09-13 37 views
-1

我正在尝试在OrientDB中存储三元组作为我正在使用的Java应用程序内部的Vertex-Edge-Vertex关系。我使用OrientDB的理解是,我可以使用TinkerPop有关API和实例化一个像这样的图表:OrientDB - 从Java应用程序中存储数据的问题

OrientGraph graph = new OrientGraph("local:/tmp/orient/test_db"); 

这真的是我做的实例图,然后我尝试用边顶点连接在这样一个循环此:(注意,一个Statement是由主题关系对象的三重态。)

for (Statement s : statements) { 

    Vertex a = graph.addVertex(null); 
    Vertex b = graph.addVertex(null); 
    a.setProperty("Subject", s.getSubject().toBELShortForm()); 
    RelationshipType r = s.getRelationshipType(); 
    if (s.getObject() != null) { 
     b.setProperty("Object", s.getObject().toBELShortForm()); 
     Edge e = graph.addEdge(null, a, b, r.toString()); 
    } 
    else { 
     b.setProperty("Object", "null"); 
     Edge e = graph.addEdge(null, a, b, "no-relationship"); 
    } 

} 

我然后依次通过图的和顶点打印出来这样的:

for (Vertex v : graph.getVertices()) { 
    out.println("Vertex: " +v.toString()); 
} 

它确实打印了很多顶点,但是当我通过命令行登录服务器时,使用server.sh,我看到的全部是ORole的3条记录和OUser的4条记录。我在这里错过了什么?因为它看起来像我的Java程序运行并完成,但数据不会被放入数据库。

+0

为什么这个被降票? – Houdini

回答

1

至少现在,答案似乎不是直接使用Tinkerpop API,而是使用Orient API。这是我用Tinkerpop做的同样的事情,但使用OrientDB API。这实际上确实将我的数据存储到数据库中:

for (Statement s : statements) { 
      ODocument sNode = db.createVertex(); 
      sNode.field("Subject", s.getSubject().toBELShortForm()); 
      sNode.save(); 

      ODocument oNode = db.createVertex(); 
      if (s.getObject() != null) { 
       oNode.field("Object", s.getObject().toBELShortForm()); 
       oNode.save(); 
      } 
      else { 
       oNode.field("Object", "null"); 
       oNode.save(); 
      } 

      RelationshipType r = s.getRelationshipType(); 
      ODocument edge = db.createEdge(sNode, oNode); 
      if (r != null) { 
       edge.field(r.toString()); 
       edge.save(); 
      } 
      else { 
       edge.field("no relationship"); 
       edge.save(); 
      } 
} 
2

在服务器的数据库目录下创建图。下面的例子假设OrientDB已根据“在/ usr /本地/东方”安装:

OrientGraph graph = new OrientGraph("local:/usr/local/orient/databases/test_db"); 

当您启动server.sh你应该找到这个数据库正确填充。

Lvc @

相关问题