Neo4j удалить свойство узла с помощью neo4j-jdbc
У меня есть край с несколькими свойствами. Я хотел бы сохранить край, но удалить только свойство name.
Мой Java Cypher это:
public static final String DELETE_EDGE_PROPERTY_QUERY = //
"MATCH ()-[r]->() where id(r) = {1} REMOVE r.{2} RETURN r"; //
Он работает на Cypher-консоли, но не работает на 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);
шифр:
public static final String DELETE_EDGE_PROPERTY_QUERY = //
"MATCH ()-[r]->() where id(r) = {1} SET r.%s = NULL RETURN r";
1 ответ
Это не neo4j-jdbc
Проблема связана с дизайном Neo4j по параметризованному запросу.
По запросу вы можете параметризовать все данные, которые вы хотите, кроме:
- этикетки
- типы отношений
- свойства
Если вы хотите сделать это в Cypher, в плагине APOC есть много помощников.