带有框架的Gremlin

带有框架的Gremlin

使用与tinkerpop的帧关联的@GremlinGroovy批注时,我收到以下错误。

java.lang.ClassCastException: com.thinkaurelius.titan.graphdb.relations.CacheEdge cannot be cast to com.tinkerpop.blueprints.Vertex
    at com.tinkerpop.frames.structures.FramedVertexIterable$1.next(FramedVertexIterable.java:36)
    at com.tinkerpop.frames.annotations.gremlin.GremlinGroovyAnnotationHandler.processVertex(GremlinGroovyAnnotationHandler.java:75)
    at com.tinkerpop.frames.annotations.gremlin.GremlinGroovyAnnotationHandler.processElement(GremlinGroovyAnnotationHandler.java:114)
    at com.tinkerpop.frames.annotations.gremlin.GremlinGroovyAnnotationHandler.processElement(GremlinGroovyAnnotationHandler.java:30)
    at com.tinkerpop.frames.FramedElement.invoke(FramedElement.java:83)
    at com.sun.proxy.$Proxy81.getProxyCandidateEdgeFromPersonUuid(Unknown Source)
    at com.company.prod.domain.Person$Impl.toImpl(Person.java:100)
    ....


以下行导致错误:

FooEdge fe = foo.getFooEdgeFromUuid(this.getUuid());


正在调用此方法:

@GremlinGroovy("it.outE('has').filter{it.inV().has('uuid', T.eq, uuid).hasNext()}")
FooEdge getFooEdgeFromUuid(@GremlinParam("uuid") String uuid);


我还尝试了以下遍历(导致相同的错误):

@GremlinGroovy("it.out('has').has('uuid', T.eq, uuid).inE('has')")


但是,当我打开gremlin外壳来测试相同的遍历时-一切正常。有什么想法可能导致此问题?

最佳答案

这并不是解决方案的答案。除了使用@GremlinGroovy批注之外,还可以将gremlin与@JavaHandler批注一起使用。

@JavaHandler
void getFooEdgeFromUuid(String uuid);

abstract class Impl implements JavaHandlerContext<Vertex>, Foo {
    public FooEdge getFooEdgeFromUuid(String uuid) {
        return frameEdges(
                gremlin().out("has")
                        .has("person-uuid", Tokens.T.eq, uuid)
                        .inE("has"),
                FooEdge.class).iterator().next();
    }
}

关于java - 带有框架的Gremlin Groovy ClassCastException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32871270/

10-11 04:13