2014-02-12 37 views
2

我正在使用嵌入式圖形數據庫作爲Java應用程序的一部分。假設我執行某種類型的密碼查詢,並返回一個包含一組節點的ExecutionResult。嵌入式neo4j中的節點引用是否相等?

可以假設這些節點形成連通圖。

這些節點中的每一個都有一些關係,我可以使用node.getRelationships(Direction.OUTGOING)訪問這些關係。我的問題是,如果其中一個關係的目標已經出現在執行結果中(即關係是查詢模板的一部分),是否保證Relationship.getEndPoint ==節點X.

我想,我真正要問的是,當Neo4j中的一個事務返回一個節點時,它是否只返回一個對象,而不同的查詢將只是返回引用該對象的引用,還是繼續產生碰巧指向相同對象的新對象數據點?由於Node沒有重寫equalsTo方法,我一直假設前者,但我希望有人能告訴我。

回答

5

節點不是引用等於。您只會獲取在不同操作中即時創建的NodeProxy對象。

equals() -method確實id平等,所以你應該使用它。

n1.equals(n2) 

,或者如果你保持節點ID各地使用

n1.getId() == n2.getId() 
+3

謝謝邁克爾。 儘管您可能會考慮將等同行爲添加到API JavaDoc中。 –

0

請參見創建節點時,neo4j在內部爲其分配節點ID。您創建的所有關係都將引用開始節點標識和結束節點標識。

用於檢查做到這一點

首先創建一個節點,並通過調用方法node.getId()

現在,創建從另一個節點到它的關係保存它的節點ID。並致電您的relationship.getEndNode().getId()

您將看到node-id相同。

+0

是的,我理解,但如果那是檢查的唯一途徑,那麼它是有道理的覆蓋節點的equals方法,其他們還沒有完成。有足夠多的設計模式,原則上可以保證id相等,當且僅當引用相等時。 –

+0

嗯有道理..因爲唯一的方法來確定如果兩個節點是相同的是由他們的節點ID .. –

0

聽起來像你的問題 - 開箱即用的Neo提供數據庫實體的併發控制,如n-hibernate或實體框架爲SQL所做的那樣。 答案是否定的!你將不得不自己管理它。如果你刪除它,可能會讓你幾個鮑勃

相關問題