?一、Spring Data Neo4j 核心知識體系
?1. 核心概念
-
?圖數據庫特性:
- 數據以 ?節點(Node)??和 ?關系(Relationship)??形式存儲,支持屬性(Property)。
- 查詢語言:Cypher(類似 SQL 的聲明式語言)。
-
?Spring Data Neo4j 定位:
- 基于 Spring Data 的抽象層,簡化 Neo4j 操作(類似 JPA 對關系型數據庫的封裝)。
- 提供注解驅動編程模型,將 Java 對象映射到圖結構。
?2. 實體映射基礎
?**(1) 節點映射**
- ?**
@Node
?注解**:- 功能:標記類為圖數據庫中的節點實體。
- 參數:
value
:指定節點標簽(Label),默認使用類名(如?@Node("User")
)。
- ?示例:
@Node("owl__Class") // 節點標簽為 owl__Class public class OwlClass { ... }
?**(2) 唯一標識符**
- ?**
@Id
?+?@GeneratedValue
**:@Id
:標記主鍵字段(對應 Neo4j 節點的內部 ID)。@GeneratedValue
:聲明 ID 由數據庫自動生成(不可手動賦值)。- ?注意:
- 默認生成策略為?
InternalIdGenerator
(Neo4j 內部長整型 ID,不建議暴露給業務系統)。 - 若需業務主鍵(如 UUID),需結合?
@Property
?定義額外字段(如?elementId
)。
- 默認生成策略為?
?**(3) 屬性映射**
- ?**
@Property
?注解**:- 功能:將 Java 字段映射到節點的屬性。
- 參數:
name
?指定屬性名(默認與字段名一致)。 - ?示例:
@Property(name = "uri") // 對應節點的 uri 屬性 private String uri;
?3. 關系映射(核心難點)?
-
?**
@Relationship
?注解**:- 功能:定義節點間的關聯關系(對應 Neo4j 的邊)。
- 參數:
type
:關系類型(如?"SUBCLASS_OF"
)。direction
:關系方向(默認?OUTGOING
)。
- ?示例:
public class OwlClass {// 定義 "SUBCLASS_OF" 關系(指向父類)@Relationship(type = "SUBCLASS_OF", direction = OUTGOING)private OwlClass parentClass; }
-
?關系的雙向管理:
- 需在關聯雙方實體類中分別定義關系(需保持一致性)。
- 示例:
Person
?與?Company
?的?WORK_AT
?關系:// Person 實體 public class Person {@Relationship(type = "WORK_AT", direction = OUTGOING)private Company company; }// Company 實體 public class Company {@Relationship(type = "WORK_AT", direction = INCOMING)private Set<Person> employees; }
?4. 查詢與持久化
-
?Repository 接口:
- 繼承?
Neo4jRepository<T, ID>
,提供 CRUD 和自定義查詢能力。 - ?示例:
public interface OwlClassRepository extends Neo4jRepository<OwlClass, Long> {// 自定義 Cypher 查詢@Query("MATCH (c:owl__Class) WHERE c.uri = $uri RETURN c")OwlClass findByUri(String uri); }
- 繼承?
-
?派生查詢(Derived Queries)?:
- 根據方法名自動生成 Cypher 查詢(如?
findByUri(String uri)
)。 - ?限制:復雜查詢仍需手動編寫 Cypher。
- 根據方法名自動生成 Cypher 查詢(如?