JanusGraph vertex.edges()返回一个RelationConstructor而不是Iterator <edge>

时间:2018-04-08 22:36:10

标签: gremlin janusgraph

我在JVM上尝试基本的JanusGraph操作。

当我尝试在两个顶点之间创建一条边并调用vertex1.edges()时,我得到org.janusgraph.graphdb.transaction.RelationConstructor而不是Iterator<Edge>的结果,这是api

我可以在Gremlin控制台上重新生成相同的结果,如下所示。但是我在随后的尝试中得到了适当的org.janusgraph.graphdb.query.ResultSetIterator

gremlin> person = graph.addVertex(label, 'person')
==>v[163844144]
gremlin> graph.tx().commit()
==>null
gremlin> person2 = graph.addVertex(label, 'anotherperson')
==>v[245764240]
gremlin> person.addEdge("knows", person2);
==>e[2pjoxy-2pjqy8-29ed-42bkwg][163844144-knows->245764240]
gremlin> graph.tx().commit()
==>null
gremlin> person.class
==>class org.janusgraph.graphdb.vertices.StandardVertex
gremlin> mye = person.edges(Direction.BOTH, "knows")
==>e[2pjoxy-2pjqy8-29ed-42bkwg][163844144-knows->245764240]
gremlin> mye.class
==>class org.janusgraph.graphdb.transaction.RelationConstructor$1$1

有人可以解释原因和/或建议解决方法吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

你回来了class org.janusgraph.graphdb.transaction.RelationConstructor$1$1。注意$1$1表示您正在处理RelationConstructor内的匿名类。特别是,您从方法readRelation()获取此Iterator。可以肯定的是,您可以在会话中调用mye instanceof Iterator进行验证。

在下面的示例中,我已将null添加到mye分配的末尾,以防止Gremlin控制台auto-iteration行为。

gremlin> mye = person.edges(Direction.BOTH, "knows"); null
==>null
gremlin> mye instanceof Iterator
==>true
gremlin> myedge = (mye.hasNext()) ? mye.next() : null
==>e[2pjoxy-2pjqy8-29ed-42bkwg][163844144-knows->245764240]
gremlin> myedge.class
==>class org.janusgraph.graphdb.relations.CacheEdge