0

我试图弄清楚交易(我使用的是neo4j 1.8.2),但不能真正理解我如何处理错误。

例如我正在创建节点:

public Node createNode() {
    Transaction tx = getGraphDb().beginTx();
    try {
        Node node = graphDb.createNode();
        tx.success();
        return node;
    } finally {
        tx.finish();
    }
}

如果未创建节点会发生什么,我如何获得它?我应该检查节点是否为空吗?

4

2 回答 2

2

您可以使用以下代码片段。catch 子句中的异常会告诉你出了什么问题。

Transaction tx = graphDb.beginTx();     
Node n = null;
try {
    n = graphDb.createNode();
    tx.success();
} catch (Exception e) {
    tx.failure();
} finally {
    tx.finish();
}

事务将在被调用tx.finish()时回滚。tx.failure()

注意:org.neo4j.graphdb.Transaction.finish() 已被弃用,取而代之的是 try-with-resource 语句,请参阅: http: //javadox.com/org.neo4j/neo4j-kernel/2.0.3/deprecated-list .html

现在正确的方法是:

try ( Transaction tx = graphDatabaseService.beginTx() )
 {
           //work here
           tx.success();
 }
于 2013-05-27T12:39:54.563 回答
1

在这种情况下,实际上并不需要 tx.failure() 。没有 tx.success() 也会回滚事务。所以你可以说它是异常控制的事务管理。

于 2013-05-28T21:07:47.943 回答