我正在尝试将Orientlet中的三元组存储为我正在处理的Java应用程序内的Vertex-Edge-Vertex关系。我对使用OrientDB的理解是我可以使用Tinkerpop API并实例化这样的图形:
OrientGraph graph = new OrientGraph("local:/tmp/orient/test_db");
这就是我所做的实例化图形,然后我尝试在这样的循环中连接带有边的顶点:(注意Statement
是由subject-relationship-object组成的三元组。)< / p>
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条记录和{{1}的4条记录}}。我在这里错过了什么?因为看起来虽然我的java程序运行并完成,但数据没有被放入数据库。
答案 0 :(得分:2)
在Server的数据库目录下创建Graph。下面的示例假设OrientDB已安装在“/ usr / local / orient”下:
OrientGraph graph = new OrientGraph("local:/usr/local/orient/databases/test_db");
启动server.sh时,您应该会正确填充此数据库。
LVC @
答案 1 :(得分: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();
}
}