Neo4j Spring Data Neo4j 4级联删除

4
在我的Neo4j/SDN4项目中,我有一个复杂的节点实体层次结构和许多链接到不同类型对象的对象。我正在开发“喜欢/不喜欢”功能,并且我的系统中的每个节点都可以有关联的Like对象列表。
现在我正在处理删除查询。问题是,如果我要删除一个大层次结构的根节点,则必须找到与此结构中每种类型的节点相关联的Like节点并单独删除它们。
因此,我想知道在Neo4j/SDN 4中是否有像RDBMS系统中的级联删除这样的选项,以便避免巨大的Cypher查询?
2个回答

4
目前(2017年3月),neoj4-ogm/SDN未提供级联删除功能。
请参见github上的一个功能请求:https://github.com/neo4j/neo4j-ogm/issues/273 在SDN中,您最好的选择是创建一个自定义的存储库查询来删除Like节点和根节点。
@Query("MATCH (e:Entity)-[r]-(like) " +
       "WHERE e.prop = {prop} " +
       "DELETE e,r,like"
void deleteEntity(@Param("prop") String prop);

2
在类似情况下,我们使用apoc-triggers。例如: 添加触发器
CALL apoc.trigger.add('removeHierarchy','
  UNWIND {deletedRelationships} AS rs WITH rs WHERE type(rs) = "LIKE" 
  MATCH (C:Node) WHERE C = endNode(rs) 
  DETACH DELETE C
', {phase:'before'});

初始树

UNWIND RANGE(1,100) as cid
WITH cid, 
     toInteger(rand()*cid) as pid
MERGE (P:Node {id: pid})
MERGE (C:Node {id: cid})
MERGE (P)-[:LIKE]->(C)

删除 root 用户

MATCH (N:Node {id: 0}) DETACH DELETE N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接