我正在使用 Java 的 Neo4j 驱动程序,它允许您运行带参数的查询。我有一个动态生成的字符串列表,用作查询, 每个查询都有不同的参数。查询字符串的示例包括:
"CREATE (a:Person {id:{id}, name:{name}})"
"CREATE (a:Person {id:{id}, name:{name}}, age:{age}})"
"CREATE (a:Person {id:{id}, age:{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();
}
不起作用,因为参数函数需要偶数个参数。现在,我不确定如何实际进行。显然, map 对象本身也将动态生成(我刚刚使用了一个简化的示例)。
任何帮助/提示将不胜感激!
最佳答案
您希望将 Map 参数直接传递到 run 方法中(作为第二个参数),而不是依赖 Neo4j 的 Values 接口(interface)。无需将 Map 对象转换为 Values 对象。
关于java - 如何在 Neo4j for java 中传递动态生成的属性名称和值列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54690766/