2016-07-12 9 views
0

Wie gebe ich RELATIONSHIP Type als Parameter in der folgenden CREATE-Anweisung ein?Parameter für die CREATE-Beziehung in Neo4j verwenden

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

Diese Zeile muss geändert werden.

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)" 

Antwort

1

Beziehungstypen sind nicht parametrisierbar. Sie müssen String-Verkettungen durchführen, damit Ihre Abfrage funktioniert.

+0

Das bedeutet, dass ich zwei verschiedene Transaktionsmethoden schreiben musste. Eine für Knoten und eine für Beziehungen. Kann ich irgendetwas an dieser Linie machen, um es zu vermeiden? 'tx.run (query_type, Values.parameters (propertiesArray.get (i)));' – Nick

+0

Woher kommt 'propertiesArray'? –

+0

Ein JSON wird einem Objekt zugeordnet, und dann habe ich eine Methode geschrieben, um ein Array von Schlüssel/Wert-Elementen für das Objekt zurückzugeben. – Nick