如何以tinkerpop / gremlin格式而不是DSE图形格式返回顶点?

时间:2016-12-21 11:32:49

标签: java datastax datastax-enterprise-graph

我正在尝试返回它刚刚用Gremlin创建的Vertex(以tinkerpop格式):

DseCluster dseCluster = DseCluster.builder()
        .addContactPoint(DbC.dseHost)
        .build();
DseSession dseSession = dseCluster.connect();
GraphTraversal traversal = graph.addV(VertexLabels.User)
        .property("username", "testuser")
GraphStatement graphStatement = DseGraph.statementFromTraversal(
    traversal
);
GraphResultSet grs = dseSession.executeGraph(graphStatement.setGraphName(DbC.graphName));
Vertex v = grs.one().as(Vertex.class);

我得到了这个例外......

java.lang.ClassCastException: com.datastax.driver.dse.graph.DefaultVertex cannot be cast to org.apache.tinkerpop.gremlin.structure.Vertex

如何更改代码以便以gremlin.structure.Vertex格式而不是DSE Graph Vertex格式返回?

我正在使用:

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>dse-driver</artifactId>
    <version>1.1.1-beta1</version>
</dependency>
<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>java-dse-graph</artifactId>
    <version>1.0.0-beta1</version>
</dependency>

我希望能够做到这一点,否则从TitanDB迁移会很痛苦。

2 个答案:

答案 0 :(得分:0)

在Datastax Vertex中,似乎您无法直接转发VertexProperty,文档中没有任何迹象。

相反,您可以使用org.apache.tinkerpop.gremlin.structure.VertexProperty访问.getProperties(String)GraphNode n = dseSession.executeGraph("g.V().hasLabel('test_vertex_meta_props')").one(); Vertex vertex = n.asVertex(); // there can be more than one VertexProperty with the key "meta_property" Iterator<VertexProperty> metaProps = vertex.getProperties("meta_property"); VertexProperty metaProp1 = metaProps.next(); // the value of the meta property int metaProp1Value = metaProp1.getValue().asInt(); // the properties of the meta property itself Iterator<Property> simpleProps1 = metaProp1.getProperties(); Property simpleProp11 = simpleProps1.next(); double simplePropValue11 = simpleProp11.getValue().asDouble(); Property simpleProp12 = simpleProps1.next(); double simplePropValue12 = simpleProp12.getValue().asDouble(); // **multi value** meta property. VertexProperty metaProp2 = metaProps.next(); )。

CASE

通过:Datastax Manual (1.1)

答案 1 :(得分:0)

根据我与Datastax团队通过jira和电子邮件进行的冗长讨论:

确实可以使用Fluent API并获得纯Gremlin / tinkerpop对象。这可以如此处所示(java-dse graph 1.x documentation)直接在GraphTraversalSource上使用next(),toList()而不使用将返回DSE对象的executeGraph()。

所以上面的代码改为:

Vertex user = graph.addV("User")
                 .property("username", "testuser").next();

其中graphGraphTraversalSource<Vertex,Vertex>个对象而Vertexorg.apache.tinkerpop.gremlin.structure.Vertex个对象。