Neo4j Spring 数据 Neo4j 4 级联删除

Neo4j Spring Data Neo4j 4 cascade delete

在我的 Neo4j/SDN4 项目中,我有一个复杂的节点权利层次结构,其中包含许多不同类型的链接对象。我正在研究 Like/Dislike 功能,我系统中的每个节点都可以有关联的 Like 对象列表。

现在我正在处理删除查询。问题是,如果我要删除大层次结构的根节点,我必须找到与此结构中每种类型的节点关联的 Like 个节点,然后分别删除它们。

所以,我只是想知道 Neo4j/SDN 4 中是否有一个选项.. RDBMS 系统中的级联删除之类的东西可以用于此目的以避免巨大的 Cypher 查询?

neoj4-ogm/SDN(2017 年 3 月)目前无法使用级联删除。

在 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);

在类似的情况下,我们使用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)

删除根目录

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