2013-05-27 520 views
0

我想弄清楚事務(我使用neo4j 1.8.2),但不能真正理解我如何處理錯誤。Neo4j交易錯誤處理

例如我創建節點:

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

如果不創建的節點會發生什麼,我如何得到它?我應該檢查節點是否爲空?

回答

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-與資源語句被棄用看到:http://javadox.com/org.neo4j/neo4j-kernel/2.0.3/deprecated-list.html

現在,正確的方法應該是:

try (Transaction tx = graphDatabaseService.beginTx()) 
{ 
      //work here 
      tx.success(); 
} 
+0

出於某種原因,我認爲會收不到任何東西,因爲這種方法不會拋出任何異常,謝謝=) – MightySeal

1

tx.failure()是不是真的需要在這種情況下。 tx.success()的缺失也會回滾事務。所以你可以說它是異常控制的事務管理。