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编写。而此当前代码只是简化版本。我的主要代码具有用户输入而非硬编码的创建内容
答案 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。