2016-03-26 2 views
3

Я интегрирующей свою систему с Neo4j и было бы интересно для меня, чтобы создать узлы, используя язык запросов Cypher Таким образом, в качестве теста, я пытаюсь сделать что-то вроде этого:Создание узла в Embedded Neo4j Применение с Cypher

String path = "test.graphdb"; 

AbstractDatabase db = new Neo4jDatabase(path, true, false); 

db.makeQuery("CREATE (n:Dog {name:'Sofia'})"); 
db.makeQuery("CREATE (n:Dog {name:'Laika'})");  db.makeQuery("CREATE (n:Dog {name:'Gaia'})"); 

Result result = db.makeQuery("MATCH (n:Dog) RETURN n"); 

boolean hasNext = result.hasNext(); 

System.out.println(hasNext); 

Где внутри класса Neo4jDatabase У меня есть этот метод makeQuery, который идет как это:

public Result makeQuery(String string) 
{ 
    try(Transaction ignored = this.db.beginTx(); 
     Result result = this.db.execute(string)) 
    { 
     return result; 
    } 

} 

к сожалению, она возвращает ложь, если бы узлы не были созданы! Что не так?

ответ

3

Вы говорите сами, вы игнорируете сделку :)

Вы должны позвонить tx.success() в вашем блоке транзакции, после того, как вы успешно итерацию по результату.

Не сдавайте результат, когда вы уже закрыли транзакцию, данные в нем не будут доступны за пределами tx.

Для этих простых утверждений вы также можете оставить tx-обработку в cypher, не нужно начинать ручные транзакции.

Но вам нужно перебрать или result.close() ваши результаты, чтобы закончить операцию Cypher.

+0

Да, еще один интересный момент заключается в том, что accessing result.next() также является чем-то, что вам нужно делать внутри транзакции! –

Смежные вопросы