如何在Neo4j for Java中传递动态生成的属性名称和值列表?

时间:2019-02-14 12:46:57

标签: java neo4j

我正在使用Java的Neo4j驱动程序,该驱动程序允许您使用参数运行查询。我有一个动态生成的用作查询的字符串列表, 每个查询具有不同的参数。查询字符串的示例包括:

  

“创建(一个:人{id:{id},名称:{name}})”

     

“创建(一个:人{id:{id},姓名:{name}},年龄:{age}})”

     

“创建(a:人员{id:{id},年龄:{age}})”

对于每个查询,我都需要传递带有适当值的不同参数,以使节点插入正常工作。

下面给出了我要执行的操作的代码段:

try (Transaction tx = session.beginTransaction()) {
                String queryStr = "CREATE (a:Person {id:{id}, name:{name}})";
                tx.run(query, Values.parameters("id", "testId", "name", "testName"));
}

这段代码适用于非动态生成的键值对属性。就本例而言,我已经将 查询字符串(通常,事务将循环运行,并且将从列表中读取每个查询字符串)。现在,当尝试通过时 参数,我只能使用上面的语法来做到。

例如,语法:

try (Transaction tx = session.beginTransaction()) {
                String queryStr = "CREATE (a:Person {id:{id}, name:{name}})";
                Map<String, String> parameterKeyValueMap = new HashMap<String, String>();
                parameterKeyValueMap.put("id", "id");
                parameterKeyValueMap.put("name", "testName");
                tx.run(query, Values.parameters(parameterKeyValueMap));
                tx.success();
}

不起作用,因为Parameters函数需要偶数个参数。现在,我不确定如何实际进行。显然, Map对象本身也会动态生成(我只是使用了一个简化示例)。

任何帮助/提示将不胜感激!

2 个答案:

答案 0 :(得分:2)

您想将Map参数直接传递给run方法(作为第二个参数),而不是依赖Neo4j的Values接口。无需将Map对象转换为Values对象。

答案 1 :(得分:0)

我不知道Neo4j,但是CREATE在JDBC中使用executeUpdate而不是executeQuery,因为这是dB写操作。查询是dB读取操作。