neo4j-如何使用Java

时间:2019-09-22 07:30:57

标签: java neo4j

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中进行验证,以使我知道bob节点已经存在。

neo4j中的

MATCH (n:Person {username: 'bob'}) RETURN n将表明已经存在一个bob节点。所以我只在第三个鲍勃上放一个if条件,以确保没有重复。但不确定如何用Java编写。而此当前代码只是简化版本。我的主要代码具有用户输入而非硬编码的创建内容

1 个答案:

答案 0 :(得分:0)

我认为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+"'})");
            }
        });
    }
}

此外,您可能需要创建constraints以避免重复。

如果您想使用Spring数据在POJO类中获取结果,则需要@QueryResult批注以将结果映射到POJO。