如何 return tinkerpop/gremlin 格式而不是 DSE 图形格式的顶点?
How to return a Vertex in the tinkerpop/gremlin format instead of the DSE graph format?
我正在尝试 return 刚刚用 Gremlin 创建的顶点(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
如何更改代码,使其 return 采用 gremlin.structure.Vertex 格式而不是 DSE 图形顶点格式?
我正在使用:
<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 迁移会很痛苦..
在 Datastax 1.1
中,您似乎无法直接转换为 Vertex
,文档中没有相关说明。
相反,您可以使用 .getProperties(String)
.
访问 VertexProperty
(org.apache.tinkerpop.gremlin.structure.VertexProperty
)
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();
根据我通过 jira 和电子邮件与 Datastax 团队进行的冗长讨论:
确实有可能拥有 Fluent API 并取回纯 Gremlin/tinkerpop 对象。这是可能的,如此处 (java-dse graph 1.x documentation) 所示,直接在 GraphTraversalSource 上使用 next()、toList() 而不是使用 executeGraph(),后者将 return DSE 对象。
所以上面的代码改为:
Vertex user = graph.addV("User")
.property("username", "testuser").next();
其中 graph
是一个 GraphTraversalSource<Vertex,Vertex>
对象,Vertex
是一个 org.apache.tinkerpop.gremlin.structure.Vertex
对象。
我正在尝试 return 刚刚用 Gremlin 创建的顶点(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
如何更改代码,使其 return 采用 gremlin.structure.Vertex 格式而不是 DSE 图形顶点格式?
我正在使用:
<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 迁移会很痛苦..
在 Datastax 1.1
中,您似乎无法直接转换为 Vertex
,文档中没有相关说明。
相反,您可以使用 .getProperties(String)
.
VertexProperty
(org.apache.tinkerpop.gremlin.structure.VertexProperty
)
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();
根据我通过 jira 和电子邮件与 Datastax 团队进行的冗长讨论:
确实有可能拥有 Fluent API 并取回纯 Gremlin/tinkerpop 对象。这是可能的,如此处 (java-dse graph 1.x documentation) 所示,直接在 GraphTraversalSource 上使用 next()、toList() 而不是使用 executeGraph(),后者将 return DSE 对象。
所以上面的代码改为:
Vertex user = graph.addV("User")
.property("username", "testuser").next();
其中 graph
是一个 GraphTraversalSource<Vertex,Vertex>
对象,Vertex
是一个 org.apache.tinkerpop.gremlin.structure.Vertex
对象。