小编典典

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

java

我正在尝试返回刚刚用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进行迁移将很痛苦。


阅读 339

收藏
2020-11-30

共1个答案

小编典典

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

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

因此,以上代码更改为:

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

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

2020-11-30