2012-12-18 58 views
1

我正在使用neo4j 1.9.M01版本和java-rest-binding 1.8.M07,並且我的代碼有問題,目的是從neo4j數據庫中獲取節點屬性「URL」是「ARREL」,通過休息使用查詢語言。這些問題似乎只發生在事務內,拋出一個異常,但在其他方面效果很好:在事務中使用QueryEngine的異常

RestGraphDatabase graphDb = new RestGraphDatabase("http://localhost:7474/db/data"); 
RestCypherQueryEngine queryEngine = new RestCypherQueryEngine(graphDb.getRestAPI()); 
Node nodearrel = null; 
Transaction tx0 = gds.beginTx(); 
try{ 
final String queryStringarrel = ("START n=node(*) WHERE n.URL =~{URL} RETURN n"); 
QueryResult<Map<String, Object>> retornar = queryEngine.query(queryStringarrel, MapUtil.map("URL","ARREL")); 
for (Map<String,Object> row : retornar) 
    { 
    nodearrel = (Node)row.get("n"); 
    System.out.println("Arrel: "+nodearrel.getProperty("URL")+" id : "+nodearrel.getId()); 
    } 
tx0.success(); 
} 
(...) 

但發生異常:*例外TX0:錯誤讀數JSON' *在該行每個執行返回QueryResult對象。

我也試圖與ExecutionEngine(交易之間)做到這一點:

ExecutionEngine engine = new ExecutionEngine(graphDb); 
String ARREL = "ARREL"; 
ExecutionResult result = engine.execute("START n=node(*) WHERE n.URL =~{"+ARREL+"} RETURN n"); 
Iterator<Node> n_column = result.columnAs("n"); 
Node arrelat = (Node) n_column.next(); 
for (Node node : IteratorUtil.asIterable(n_column)) 
(...) 

但它也未能在* n_column.next()*返回拋出異常空對象。

問題是我需要使用事務來優化查詢,因爲如果不是它需要太多時間來處理我需要做的所有查詢。我是否應該嘗試將多個操作加入到查詢中,以避免使用這些事務?

回答

0

嘗試在添加單引號:

START n=node(*) WHERE n.URL =~ '{URL}' RETURN n 
+0

感謝您的答案,但異常似乎仍然存在。 – p3r1

0

您可以更新你的java休息結合到最新版本(1.8)?在我們之間有一個版本可以自動將REST批處理操作應用於具有事務語義的地方。

所以你看到的交易是不是真實的交易,但只是記錄你的操作,如批其餘的操作上tx.success/finish

執行執行事務中的查詢,但只有的TX後訪問結果完成。然後你的結果會在那裏。

例如,這對發送許多密碼查詢一次性發送到服務器很有用,並且可以一次性將結果全部提供給服務器。

是的@ulkas使用參數,但不是這樣的:

START n=node(*) WHERE n.URL =~ {URL} RETURN n 

params: { "URL" : "http://your.url" } 

無報價neccessary使用PARAMS時,就像SQL預處理語句。

+0

好的,我會盡力解決你的問題。非常感謝答案。 – p3r1