При движении от SDN 3
к SDN 4
и от Neo4j 2.3
к Neo4j 3.0.1
я столкнулся с вопросом с несогласованностью между OEM и пользовательскими запросами Cypher.Neo4j SDN несоответствие между OEM и пользовательскими запросами Cypher
У меня есть следующий запрос: Cypher
@Query("MATCH()-[r]-(cg:CriterionGroup) WHERE id(cg) = {criterionGroupId} DELETE cg, r")
void deleteCriterionGroup(@Param("criterionGroupId") Long criterionGroupId);
Прямо сейчас, с SDN 4 этот запрос не работает без последующего обхода после deleteCriterionGroup
вызова метода:
session.clear();
Не могли бы вы показать правильный код, как удалить CriterionGroup
сейчас в SDN 4, чтобы поддерживать ссылки связанных узлов согласованы.
Это схема моих данных:
Как вы можете видеть - CriterionGroup
подключен к Decision
, Criterion
и User
узлов.
ОБНОВЛЕНО
Как было предложено, я обновил свой метод:
@Override
public void deleteCriterionGroup(Long criterionGroupId) {
CriterionGroup criterionGroup = criterionGroupRepository.findOne(criterionGroupId);
criterionGroup.setAuthor(null);
criterionGroup.setOwner(null);
criterionGroup.setCriteria(null);
criterionGroup = criterionGroupRepository.save(criterionGroup);
criterionGroupRepository.delete(criterionGroup);
}
Это довольно нормально, OGM не знает об изменениях, которые вы делаете в базе данных, если вы не скажете ему. Также имейте в виду, что sdn3 был построен вокруг встроенного gdb, в то время как sdn4 построен вокруг базы данных сервера и имеет реальную концепцию отображения данных –
Это мой вопрос: какой правильный способ удалить этот узел с OGM? Я не хочу использовать обходные пути. – brunoid
загрузить критерийГруппа и его отношения, удалить отношения с вашими POJO, session.save(); –