Neo4j Spring Data Neo4j 4级联删除

时间:2017-03-17 07:45:38

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

在我的Neo4j / SDN4项目中,我有一个复杂的节点权限层次结构,其中包含许多不同类型的链接对象。我正在研究Like / Dislike功能,我系统中的每个节点都可以有define temp-table tt no-undo field priority as character . create tt. tt.priority = "". create tt. tt.priority = "1". create tt. tt.priority = "2". create tt. tt.priority = "3". create tt. tt.priority = "". for each tt by ( if tt.priority = "" then "4" else tt.priority ): display string( rowid( tt ) ) tt.priority. end. 个对象的关联列表。

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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