在Amazon Neptune中,我想在Java中将多个Gremlin命令作为单个事务运行。该文档说不支持tx.commit()和tx.rollback()。这建议-单笔交易中包含用分号(;)或换行符(\ n)分隔的多个语句。
文档中的示例显示了Java支持Gremlin,但我不理解如何“用分号分隔多个语句”
GraphTraversalSource g = traversal()。withRemote(DriverRemoteConnection.using(cluster));
// Add a vertex.
// Note that a Gremlin terminal step, e.g. next(), is required to make a request to the remote server.
// The full list of Gremlin terminal steps is at https://tinkerpop.apache.org/docs/current/reference/#terminal-steps
g.addV("Person").property("Name", "Justin").next();
// Add a vertex with a user-supplied ID.
g.addV("Custom Label").property(T.id, "CustomId1").property("name", "Custom id vertex 1").next();
g.addV("Custom Label").property(T.id, "CustomId2").property("name", "Custom id vertex 2").next();
g.addE("Edge Label").from(g.V("CustomId1")).to(g.V("CustomId2")).next();
答案 0 :(得分:1)
您还可以使用SessionedClient,它将在close()上在同一事务中运行所有查询。
答案 1 :(得分:0)
您所指的doc用于使用“字符串”模式进行查询提交。在您的方法中,通过使用图形遍历源的远程实例(“ g”对象)来使用“字节码”模式。相反,您应该通过客户端对象提交字符串脚本
Client client = gremlinCluster.connect();
client.submit("g.V()...iterate(); g.V()...iterate(); g.V()...");
答案 2 :(得分:0)
获取群集对象后,
String sessionId = UUID.randomUUID().toString();
Client client = cluster.connect(sessionId);
client.submit(query1);
client.submit(query2);
.
.
.
client.submit(query3);
client.close();
当您运行.close()时,所有突变都会被提交。
您还可以从查询reference中捕获响应。
List<Result> results = client.submit(query);
results.stream()...