Я использую драйвер Neo4j для Java, который позволяет запускать запрос с параметрами.У меня есть динамически генерируемый список строк, которые действуют как запросы, каждый из которых имеет разные параметры.Примеры строк запроса:
"CREATE (a: Person {id: {id}, name: {name}})" "
" CREATE (a: Person {id: {id}, имя: {name}}, возраст: {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();
}
не работает, поскольку функция Parameters требует четного числа аргументов.Теперь я не уверен, как на самом деле действовать.Очевидно, что сам объект Map также будет генерироваться динамически (я только что использовал упрощенный пример).
Любая помощь / советы будут с благодарностью!