neo4j - как ограничить повторяющиеся узлы с помощью Java - PullRequest
1 голос
/ 22 сентября 2019
import org.neo4j.driver.v1.AuthTokens;
import org.neo4j.driver.v1.Driver;
import org.neo4j.driver.v1.GraphDatabase;
import org.neo4j.driver.v1.Session;


public class adding {

    static Driver driver;

    public static void main(String args[]) {
        driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j","neo4j"));
        Session session = driver.session();
        session.run("CREATE (n:Person {username: 'bob'})");
        session.run("CREATE (n:Person {username: 'tom'})");
        session.run("CREATE (n:Person {username: 'bob'})"); // I don't want this ran

    }
}

Используя neo4j с java, как я могу запретить создание того же узла снова?Например, вы можете видеть в приведенном выше коде, что есть 2 свойства bob.

Как мне проверить в Java, чтобы я знал, что узел Боба уже существует.

MATCH (n:Person {username: 'bob'}) RETURN n в neo4j покажет, что узел bob уже существует.так что я бы просто поставил условие if над третьим бобом, чтобы быть уверенным, что дубликат не создан.но не уверен, как написать это в Java.И этот текущий код является просто упрощенной версией.Мой основной код имеет пользовательский ввод, а не жестко закодированные создания

1 Ответ

0 голосов
/ 22 сентября 2019

Я думаю, StatementResult - это то, что вы ищете для запуска запроса на совпадение.

И вы можете сделать что-то подобное.

import org.neo4j.driver.v1.AuthTokens;
import org.neo4j.driver.v1.Driver;
import org.neo4j.driver.v1.GraphDatabase;
import org.neo4j.driver.v1.Session;
import org.neo4j.driver.v1.StatementResult;

import java.util.Arrays;
import java.util.List;


public class adding {

    static Driver driver;

    public static void main(String args[]) {
        driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j","neo4j"));
        Session session = driver.session();

        List<String> userList = Arrays.asList("bob","tom","bob");
        userList.forEach(user->{
            StatementResult result = session.run( "MATCH (a:Person {username: '"+user+"'}) RETURN a");
            //Check if the node exists and create only if node doesn't exists
            if(!result.hasNext()){
                session.run("CREATE (n:Person {username: '"+user+"'})");
            }
        });
    }
}

Кроме того, вам может потребоваться создать ограничения , чтобы избежать дублирования.

И если вы хотите получить результат в классе POJO с данными Spring, то вынужна @ QueryResult аннотация для сопоставления результатов с POJO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...