Neo4j удалить свойство узла с помощью neo4j-jdbc - PullRequest
0 голосов
/ 25 мая 2018

У меня есть ребро с несколькими свойствами.Я хотел бы сохранить край, но удалить только свойство name.

Мой java Cypher такой:

public static final String DELETE_EDGE_PROPERTY_QUERY = //
        "MATCH ()-[r]->() where id(r) = {1} REMOVE r.{2} RETURN r"; //

Он работает на консоли шифра, но не работает на jdbc.

Я получил эту ошибку:

обработка не удалась;вложенным исключением является org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback;неклассифицированное исключение SQLE для SQL [MATCH () - [r] -> (), где id (r) = {1} REMOVE r. {2} RETURN r];Состояние SQL [null];код ошибки [0];Произошли некоторые ошибки: [Neo.ClientError.Statement.SyntaxError]: Неверный ввод '{': ожидается идентификатор, пробел, имя функции или имя ключа свойства (строка 1, столбец 45 (смещение: 44)) "MATCH ()- [r] -> () где id (r) = {1} REMOVE r. {2} RETURN r "`

Есть предложения?

Спасибо

РЕДАКТИРОВАТЬ

Я не мог сделать с шаблоном JDBC.поэтому я использовал String replace: установка свойства в NULL удалит свойство (http://www.baeldung.com/java-neo4j)

Решение: Java:

String deleteQuery = String.format(DELETE_EDGE_PROPERTY_QUERY, property);
plantJdbcTemplate.update(deleteQuery, edgeId);

cypher:

public static final String DELETE_EDGE_PROPERTY_QUERY = //
        "MATCH ()-[r]->() where id(r) = {1} SET r.%s = NULL RETURN r";

1 Ответ

0 голосов
/ 25 мая 2018

Это не проблема neo4j-jdbc, это связано с дизайном Neo4j для параметризованного запроса.

В запросе вы можете параметризовать все необходимые данные, кроме:

  • метки
  • типы отношений
  • свойства

Если вы хотите сделать это в Cypher, в плагине APOC есть много помощников.

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