有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ArangoDB在事务中使用图形模块

我正在使用Java驱动程序(4.1),我需要命名图操作的保证,但我需要在事务中执行其中几个更高级别的操作

比如说,我想一次性将几个顶点添加到一个集合中,并且我想在任何失败时回滚所有操作。如果我使用的是Java驱动程序,我想做如下操作:

db.beginTransaction() ; // this method doesn't exist
db.graph("myGraph").vertexCollection(vertexCollectionName1).insertVertex(a);
db.graph("myGraph").vertexCollection(vertexCollectionName1).insertVertex(b);
db.graph("myGraph").vertexCollection(vertexCollectionName2).insertVertex(c);
// ...so on...
db.executeTransaction(); // rollback all on failure, this method doesn't exist

我不太喜欢用JavaScript做这项工作,但如果我理解正确的话,我想要的类似物可能看起来像这样,因为JS函数在事务中运行(使用Java驱动程序,但指定JS函数——硬编码,无参数):

String action = "function (params) { "
        + "var graph_module = require('@arangodb/general-graph');"
        + "var graph = graph_module._graph('myGraph');"
        + "graph.collection1.save({name: 'a'});"
        + "graph.collection1.save({name: 'b'});"
        + "graph.collection2.save({name: 'c'});"
        // ...so on...  
        + "}";

db.transaction(action, String.class, options); // request through Java driver

我可能想在一个事务中混合其他一些边缘更新、删除——所有这些都是通过graph模块在高层完成的。我的问题是,我能得到我想要的吗?这是正确的方式吗

我还没有尝试过上面的JS交易,但我正在寻找指导,然后再冲进死胡同


共 (1) 个答案

  1. # 1 楼答案

    不幸的是,目前除了使用javascript创建服务器端事务外,没有其他方法。您的第二个代码示例是目前唯一正确的方法

    但是在ArangoDB的下一个主要版本(3.x)中会有客户端事务。然后,您应该能够像第一个代码示例中那样工作