【问题标题】:neo4j transaction not rolling backneo4j 事务不回滚
【发布时间】:2015-03-28 16:19:59
【问题描述】:

我正在使用带有 java 的 neo4j 2.1.7。

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

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

无效失败()

将此事务标记为失败,这意味着它将 调用 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>

【问题讨论】:

    标签: java transactions neo4j


    【解决方案1】:

    没有基于 REST 的事务,至少对于那个旧版本没有。

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

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

    【讨论】:

    • 嗨。我正在研究 neo4j-jdbc 代码,但我无法理解如何进行批量事务。我不愿意使用 spring,因为我没有 POJO 模型。我只需要运行一些查询并以简单的数据类型获得结果——没有 ORM 类型工具的开销。还有 JDBC 与 Spring,哪一个会用 Neo4j 更新。我正在考虑迁移到 2.2 版本,并且将来一旦它们可用,我就会迁移到新版本。
    猜你喜欢
    • 2011-09-19
    • 2012-07-13
    • 2013-12-15
    • 2011-01-26
    • 2017-03-03
    • 2012-03-10
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多