Как передать динамически генерируемый список имен и значений свойств в Neo4j для Java? - PullRequest
0 голосов
/ 14 февраля 2019

Я использую драйвер 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 также будет генерироваться динамически (я только что использовал упрощенный пример).

Любая помощь / советы будут с благодарностью!

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы хотите передать параметр Map непосредственно в метод run (как второй параметр), вместо того, чтобы полагаться на интерфейс Values ​​Neo4j.Нет необходимости в приведении объекта Map в объект Values.

0 голосов
/ 14 февраля 2019

Я не знаю Neo4j, но CREATE использует executeUpdate в JDBC, а не executeQuery, поскольку это операция записи в дБ.Запрос - это операция чтения в дБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...