2013-10-17 30 views
1

是否有線程安全的方式來確保由框架圖創建獨特的頂點?考慮以下內容:帶框架的獨特頂點

Node n = framedGraph.addVertex(1, Node.class); 
Node m = framedGraph.addVertex(1, Node.class); 
System.out.println(n.equals(framedGraph.getVertex(1, Node.class))); 
System.out.println(m.equals(framedGraph.getVertex(1, Node.class))); 

打印true, false

我在找功能類似於Neo4j提供的get or create unique node功能(這是本例中的支持圖)。

順便說一句 - 有沒有辦法使用非數字ID?

Node m = framedGraph.addVertex("http://example.org", Node.class); 
System.out.println(n.equals(framedGraph.getVertex("http://example.org", Node.class))); 

打印false

回答

3

的Neo4j和藍圖的最格拉夫實現忽略ID參數。除了TinkerGraph,他們通常都會分配自己的ID而無需創建自己的ID。您始終可以使用IdGraph來幫助模擬您自己的ID。

藍圖不保留「獲取或創建」的概念。你必須自己實現它,否則我想可能需要使用Neo4j代碼來完成它,期望你的代碼不再能夠從一個圖表移植到另一個圖表。這樣,也許你可以構建一個類似於IdGraph的圖包裝器實現,該實現暴露了getOrCreate()方法。至少這樣,你仍然可以使用接口並且這種邏輯被封裝在那裏。當然,這將無助於直接在幀中啓用這些功能。

+0

謝謝!這解決了ID問題。但現在,當向框架圖添加頂點,然後將該頂點添加到我手動創建的索引('index.put(「term」,「foo1」,n.asVertex());')時,我得到一個異常:'com .tinkerpop.blueprints.util.wrappers.id.IdVertex不能轉換爲com.tinkerpop.blueprints.impls.neo4j.Neo4jElement'。任何方式來解決這個問題? – condit

+1

我想你必須拆開'IdVertex'。嘗試使用'IdVertex'實例並在將它傳遞給索引之前調用'getBaseVertex'。 http://www.tinkerpop.com/docs/javadocs/blueprints/2.4.0/com/tinkerpop/blueprints/util/wrappers/id/IdVertex.html#getBaseVertex() –

+0

Yep - '((IdVertex)n.asVertex ())。getBaseVertex()'訣竅。非常感謝。 – condit