neo4j交易没有回滚

时间:2015-03-28 16:20:00

标签: java transactions neo4j

我正在使用neo4j 2.1.7和java。

    try(Transaction transaction = this.graphDatabaseService.beginTx())
    {
        Node user = this.graphDatabaseService.createNode();
        user.setProperty("userId", userId);
        transaction.failure();
    }

所以我得到GraphDatabaseService的对象并创建一个新事务并将其标记为回滚。根据他们的javadocs:

  

void failure()

     

将此交易标记为失败,这意味着它将会失败   无条件地在调用close()时回滚。一旦这个   方法已被调用,调用success()无关紧要   之后 - 交易仍将被回滚。

但我发现无论如何都会创建节点。我试过了throwing an exception。我也试过not calling transaction.success()。我仍然看到更改已提交但未回滚。我不确定这种行为,并希望得到解释。感谢。

如果你必须知道,我正在尝试使用嵌套事务构建一个commit()函数,这样如果内部事务中的任何操作失败,父事务也必须失败。但是,在这个过程中,我发现无论我做什么,交易都会被提交。

更新1:

neo4j的嵌入式版本运行正常。其余版本造成了这个麻烦。我正在使用这个包休息:

<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-rest-graphdb</artifactId>
    <version>2.0.1</version>
</dependency>

1 个答案:

答案 0 :(得分:1)

没有REST上的交易,至少不适用于那个旧版本。

只有HTTP通过新的Cypher端点进行交易。

该库已停产,我建议您使用例如JDBC驱动程序或Spring Data REST附带的新实现。