2016-07-12 5 views
0

を次のCREATEステートメントのパラメータとして指定するにはどうすればよいですか?Neo4jでのCREATEリレーションシップのパラメータの使用

String query = "MATCH (n:User),(m:User) WHERE n.id = {srcId} AND m.id = {dstId} CREATE (n)-[{r:{type}} {dateAdded:{dateAdded}}]->(m)"; 

この行は変更する必要があります。

public static void TransactionExample() throws Exception 
{ 
    Driver driver = GraphDatabase.driver("bolt://localhost", AuthTokens.basic("neo4j", "admin4j")); 
    Session session = driver.session(); 

    String query = "MATCH (n:User),(m:User) WHERE n.id = {srcId} AND m.id = {dstId} CREATE (n)-[{r:{type}} {dateAdded:{dateAdded}}]->(m)"; 

     try (Transaction tx = session.beginTransaction()) 
     { 
      tx.run(query,Values.parameters("srcId",srcId,"dstId",dstId,"relType",relType,"dateAdded",dateAdded)); 
      tx.success(); 
     } 
    } 
    session.close(); 
    driver.close(); 
} 

org.neo4j.driver.v1.exceptions.ClientException: Invalid input '{': expected whitespace, comment or ']' (line 1, column 98 (offset: 97)) 
"MATCH (n:User),(m:User) WHERE n.id = {srcId} AND m.id = {dstId} CREATE (n)-[{relType:{relType}} {dateAdded:{dateAdded}}]->(m)" 

答えて

1

リレーションシップタイプはパラメータ化できません。クエリを機能させるには、文字列連結を行う必要があります。

+0

これは、2つの異なるトランザクションメソッドを記述する必要があることを意味します。 1つはノード用、もう1つは関係用です。それを避けるために、私はこの行に何かをすることはできますか? 'tx.run(query_type、Values.parameters(propertiesArray.get(i)));' – Nick

+0

'propertiesArray'はどこから来ますか? –

+0

JSONがオブジェクトにマップされている場合、オブジェクトのキー/値アイテムの配列を返すメソッドを記述しました。 – Nick

関連する問題