我在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
有人可以解释原因和/或建议解决方法吗? 谢谢!
答案 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