[英]Neo4j exception when creating relationships
我正在創建所有節點,然后添加所有關系。 所有節點都存儲在HashMap中,該字符串包含String名稱作為鍵,而node作為值,因此我可以輕松地訪問節點以創建關系。
for(Map.Entry<String[], Integer> entry: company_counts_backward.entrySet()){
String[] node_names = entry.getKey();
String company_from = node_names[0];
String company_to = node_names[1];
int count = entry.getValue();
Node companyFromNode = nodes_created.get(company_from);
Node companyToNode = nodes_created.get(company_to);
Relationship relationship = companyFromNode.createRelationshipTo(companyToNode, Relations.WORKED_AT);
relationship.setProperty("relationship-type", "knows");
relationship.setProperty("length", count);
}
請注意,此for循環由Transaction tx = graphDB.beginTx();
包圍Transaction tx = graphDB.beginTx();
tx.finish();
問題是創建關系時,我似乎Exception in thread "main" org.neo4j.graphdb.NotInTransactionException
拋出Exception in thread "main" org.neo4j.graphdb.NotInTransactionException
異常。
完整的錯誤跟蹤如下:
at org.neo4j.kernel.impl.persistence.PersistenceManager.getCurrentTransaction(PersistenceManager.java:284)
at org.neo4j.kernel.impl.persistence.PersistenceManager.getResource(PersistenceManager.java:249)
at org.neo4j.kernel.impl.persistence.PersistenceManager.currentKernelTransactionForReading(PersistenceManager.java:230)
at org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.transaction(ThreadToStatementContextBridge.java:53)
at org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.instance(ThreadToStatementContextBridge.java:47)
at org.neo4j.kernel.impl.core.NodeProxy.createRelationshipTo(NodeProxy.java:406)
任何人都可以識別我的方向並指出正確的方向嗎?
將處理數據庫的所有代碼放在try-with-resources
塊中:
try (Transaction tx = db.beginTx()) {
Node n1 = db.createNode();
Node n2 = db.createNode();
n1.createRelationshipTo(n2, REL_TYPE);
tx.success(); // This is important!
}
請注意,有時(例如,在執行只讀操作時)您不必調用tx.success()
,因為沒有要提交的內容。
有關交易管理的更多信息,請參閱文檔 。
PS我確實知道您指出您了解事務管理的必要性,所以我不只是重復您的話,我強調a) Transaction#finish()
已棄用,不應使用,因此建議使用b)在完成交易之前,應始終提交更改(如果已進行)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.