OEM和自定义Cypher查询之间的Neo4j SDN不一致

时间:2016-05-29 21:18:00

标签: neo4j cypher spring-data-neo4j spring-data-neo4j-4

SDN 3转移到SDN 4以及从Neo4j 2.3转移到Neo4j 3.0.1时,我遇到了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();

请您在SDN 4中显示如何删除CriterionGroup的正确代码,以保持相关节点的引用一致。

这是我的数据架构:

enter image description here

如您所见 - CriterionGroup已连接到DecisionCriterionUser个节点。

已更新

根据建议,我更新了我的方法:

@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);
}

1 个答案:

答案 0 :(得分:2)

使用OGM删除关系可保持一致性,前提是还可以维护对象引用。 如果您要删除CriterionGroup,那么,对于您的应用程序(决策,标准,用户)加载的任何相关实体,您需要将其关联的CriterionGroups设置为null然后保存。如果没有加载这些(如果您将CriterionGroup加载到深度0,则可能),那么您只需通过存储库/会话删除CriterionGroup。混合加载和保存深度时要小心。

如果您想绕过OGM并使用自定义Cypher删除语句,则必须清除会话(或使用新会话)并重新加载实体以使它们与图形同步。