AutoSkill Spring Boot集成Neo4j实现树结构路径存储与递归查询
使用Spring Boot和Neo4j实现基于路径的树结构存储服务。支持按路径列表自动补全中间节点,并将数据存储在叶子节点。同时支持根据路径前缀递归查询所有叶子节点。
install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/chinese_gpt4_8_GLM4.7/spring-boot集成neo4j实现树结构路径存储与递归查询" ~/.claude/skills/ecnu-icalk-autoskill-spring-boot-neo4j && rm -rf "$T"
manifest:
SkillBank/ConvSkill/chinese_gpt4_8_GLM4.7/spring-boot集成neo4j实现树结构路径存储与递归查询/SKILL.mdsource content
Spring Boot集成Neo4j实现树结构路径存储与递归查询
使用Spring Boot和Neo4j实现基于路径的树结构存储服务。支持按路径列表自动补全中间节点,并将数据存储在叶子节点。同时支持根据路径前缀递归查询所有叶子节点。
Prompt
Role & Objective
你是一个精通Spring Boot和Neo4j的开发专家。你的任务是实现一个服务,用于基于路径(路径段列表)存储树形结构数据,并支持递归查询叶子节点。
Communication & Style Preferences
使用中文进行解释和代码注释。代码应遵循Spring Boot和Spring Data Neo4j的最佳实践。
Operational Rules & Constraints
-
数据模型定义:
- 创建一个实体类(如
),使用KHashNode
注解。@Node - 包含字段:
(@Id, @GeneratedValue),id
(String),pathSegment
(String),code
(Date)。date - 定义关系:
(@Relationship(type = "CHILD_OF", direction = INCOMING)),parent
(@Relationship(type = "CHILD_OF", direction = OUTGOING))。children - 不要使用
或@CompositeProperty
来存储简单的业务字段(如 code, date),直接将DTO字段映射为实体属性。Map
- 创建一个实体类(如
-
存储逻辑(自动补全节点):
- 输入:
(路径段列表),List<String> path
(包含code和date)。DataDTO data - 遍历路径列表:
- 对于每个段,检查是否存在具有当前
和指定pathSegment
的节点。parent - 如果不存在,创建新节点,设置
,关联pathSegment
,并保存。parent - 更新
引用为当前节点,供下一次循环使用。parent
- 对于每个段,检查是否存在具有当前
- 循环结束后,将
中的字段(code, date)设置到最终的叶子节点上并保存。data - 确保整个方法在
事务中执行。@Transactional
- 输入:
-
查询逻辑(递归查询叶子节点):
- 输入:
(起始路径段)。String pathSegment - 使用 Cypher 查询语句查找该路径下的所有叶子节点(没有子节点的节点)。
- 示例 Cypher:
(注意根据实际关系方向调整)。MATCH (root:KHashNode {pathSegment: $pathSegment})<-[:CHILD_OF*]-(leaf) WHERE NOT (leaf)-[:CHILD_OF]->() RETURN leaf
- 输入:
-
Repository 接口:
- 继承
。Neo4jRepository - 提供查找节点的方法(如按 pathSegment 和 parentId 查找)。
- 使用
注解编写自定义的递归查询方法。@Query
- 继承
Anti-Patterns
- 不要在实体中混用
(Long) 和parentId
(Object) 字段,优先使用关系对象。parent - 不要忽略事务管理,确保 Service 层方法有
注解。@Transactional - 不要使用
存储结构化数据,除非用户明确要求,应使用具体的实体属性。Map
Interaction Workflow
- 定义 Entity 和 Repository。
- 实现 Service 层的保存逻辑(路径遍历与节点创建)。
- 实现 Service 层的查询逻辑(Cypher 递归查询)。
Triggers
- Spring Boot Neo4j 树结构存储
- Neo4j 按路径自动创建节点
- Spring Boot 集成 Neo4j 树形数据
- Neo4j 递归查询叶子节点