我正在尝试返回刚刚用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进行迁移将很痛苦。
根据我通过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();
其中graph是GraphTraversalSource<Vertex,Vertex>对象,Vertex是org.apache.tinkerpop.gremlin.structure.Vertex对象。
graph
GraphTraversalSource<Vertex,Vertex>
Vertex
org.apache.tinkerpop.gremlin.structure.Vertex