如何使用gremlin java和orientdb遍历verticies

时间:2017-01-04 16:26:45

标签: java graph orientdb gremlin graph-traversal

我是Graph数据库的新手,我无法解决下面列出的问题。 我如何能够实现OrientDb查询 TRAVERSE OUT() FROM (SELECT FROM SomeClassThatExtendsV WHERE name = 'SomeUsefulName')

如果我将通过OrientDb java api执行此查询:

new OSQLSynchQuery<Vertex>("TRAVERSE OUT() FROM (SELECT FROM SomeClassThatExtendsV WHERE name = 'SomeUsefulName')");

结果将是包含子和孩子的所有子项目等等。

我需要使用gremlin api实现相同的逻辑,这就是我所拥有的:

    GraphQuery query = framedGraph.getBaseGraph().query().has("@class", "SomeClassThatExtendsV").has("name", "SomeUsefulName");
    OrientVertex vertex = (OrientVertex) query.vertices().iterator().next();
    Tree tree = new Tree();
    new GremlinPipeline(vertex).out().tree(tree).loop("TestLoop", loopBundle -> false).iterate();
    Iterator it = tree.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue());

    }

结果我有NullPointerException。

java.lang.NullPointerException
    at com.tinkerpop.pipes.branch.LoopPipe.getLoops(LoopPipe.java:75)
    at com.tinkerpop.pipes.branch.LoopPipe.processNextStart(LoopPipe.java:49)
    at com.tinkerpop.pipes.AbstractPipe.next(AbstractPipe.java:89)
    at com.tinkerpop.pipes.util.Pipeline.next(Pipeline.java:115)
    at com.tinkerpop.pipes.util.PipeHelper.iterate(PipeHelper.java:35)
    at com.tinkerpop.gremlin.java.GremlinPipeline.iterate(GremlinPipeline.java:1542) 

也许我在GremlinPipeline中做错了什么?

此时我不知道完整的图形结构,我需要得到像树一样的东西,或类似于OrientDb工作室的结果。

这里有些更新,我尝试使用循环,但正如我之前所说,我无法设置循环次数,因此我的测试应用程序卡住了,因为在某些顶点我有边缘和边缘。

有人可以帮我解决这个问题吗?

0 个答案:

没有答案