Spring Data Neo4j 簡介

Spring Data Neo4j,簡稱 SDN,是下一代 Spring Data 模組,由 Neo4j, Inc. 建立和維護,並與 VMware 的 Spring Data 團隊密切合作。它支援所有官方支援的 Neo4j 版本,包括 Neo4j AuraDB。Spring Data Neo4j 專案將上述 Spring Data 概念應用於使用 Neo4j 圖形資料儲存庫的解決方案開發。

SDN 完全依賴 Neo4j Java Driver,而沒有在對應框架和驅動程式之間引入另一個「驅動程式」或「傳輸」層。Neo4j Java Driver(有時稱為 Bolt 或 Bolt 驅動程式)被用作一種協定,很像 JDBC 對於關聯式資料庫。

SDN 是一個物件圖形對應 (Object-Graph-Mapping, OGM) 函式庫。OGM 將圖形中的節點和關係對應到領域模型中的物件和參考。物件實例對應到節點,而物件參考使用關係對應,或序列化到屬性(例如,對 Date 的參考)。JVM 原始型別對應到節點或關係屬性。OGM 抽象化了資料庫,並提供了一種方便的方式來持久化您的領域模型到圖形中,並在無需直接使用底層驅動程式的情況下查詢它。它還為開發人員提供了彈性,可以提供自訂查詢,以應對 SDN 產生的查詢不足的情況。

SDN 是先前 SDN 版本 5 的官方後繼者,本文件將其稱為 SDN+OGM。SDN 版本 5 使用了一個獨立的物件對應框架,很像 Spring Data JPA 與 JPA 的關係。那個獨立的層,又名 Neo4j-OGM (Neo4j Object Graph Mapper),現在包含在這個模組本身中。Spring Data Neo4j 本身是一個物件對應器,專門用於 Spring 和 Spring Boot 應用程式以及某些支援的 Jakarta EE 環境中。它不要求或支援物件對應器的單獨實作。

當前 SDN 版本與先前 SDN+OGM 不同的顯著功能包括

  • SDN 本身就是一個完整的 OGM

  • 完全支援不可變實體,因此完全支援 Kotlin 的資料類別

  • 完全支援 Spring Framework 本身和 Spring Data 中的反應式程式設計模型

  • Neo4j client 和反應式 client 功能,重拾了範本優於純驅動程式的想法,簡化了資料庫存取

我們提供儲存庫作為儲存和查詢文件的高階抽象,以及範本和 client 用於通用領域存取或通用查詢執行。它們都與 Spring 的應用程式交易整合。

Neo4j 支援的核心功能可以直接透過 Neo4jClientNeo4jTemplate 或其反應式變體使用。它們都提供與 Spring 應用程式層級交易的整合。在較低的層級,您可以取得 Bolt 驅動程式實例,但在這些情況下,您必須管理自己的交易。

您仍然可以使用 Neo4j-OGM,即使在現代 Spring Boot 應用程式中也是如此。但是您不能將其與 SDN 6+ 一起使用。如果您嘗試這樣做,您將在兩個不同的 - 且不相關的 - 持久化上下文中擁有兩組不同的實體。因此,如果您想堅持使用 Neo4j-OGM 3.2.x,您將使用 Spring Boot 實例化的 Java 驅動程式,並將其傳遞給 Neo4j-OGM session。Neo4j-OGM 3.2.x 仍然受到支援,我們建議在 Quarkus 等框架中使用它。然而,在 Spring Boot 應用程式中,您的首選應該是 SDN。

請務必閱讀 常見問題,我們在其中解答了許多關於我們的對應決策以及如何顯著改進與 Neo4j 叢集實例(例如 Neo4j AuraDB 和內部部署叢集部署)互動的常見問題。

需要理解的重要概念是 Neo4j Bookmarks、可能需要 納入適當的重試機制,例如 Spring RetryResilience4j(我們推薦後者,因為此知識也適用於 Spring 之外)以及在 Neo4j 叢集上下文中唯讀與寫入查詢的重要性。