Spring Data Neo4j の導入

Spring Data Neo4j または略して SDN は、Neo4j 株式会社 (英語) によって作成および保守される次世代の Spring Data モジュールです。VMware Spring Data チームと緊密に連携しています。Neo4j AuraDB を含む、Neo4j の公式にサポートされているすべてのリリースをサポートします。Spring Data Neo4j プロジェクトは、前述の Spring Data の概念を Neo4j グラフデータストアを使用したソリューションの開発に適用します。

SDN は、マッピングフレームワークとドライバーの間に別の「ドライバー」層や「トランスポート」層を導入することなく、Neo4j Java ドライバー [GitHub] (英語) に完全に依存しています。Neo4j Java ドライバー (ボルトまたはボルトドライバーとも呼ばれます) は、JDBC がリレーショナルデータベースで使用されるのとよく似たプロトコルとして使用されます。

SDN は、オブジェクトグラフマッピング (OGM) ライブラリです。OGM は、グラフ内のノードと関連をドメインモデル内のオブジェクトと参照にマップします。オブジェクトインスタンスはノードにマップされ、オブジェクト参照はリレーションシップを使用してマップされるか、プロパティ (日付への参照など) に直列化されます。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 クライアントとリアクティブクライアント機能により、プレーンドライバーにテンプレートの概念が復活し、データベースアクセスが容易になります。

当社は、ドキュメントを保存およびクエリするための高レベルの抽象化としてリポジトリを提供するだけでなく、汎用ドメインアクセスまたは汎用クエリ実行用のテンプレートとクライアントも提供します。これらはすべて、Spring のアプリケーショントランザクションと統合されています。

Neo4j サポートのコア機能は、Neo4jClient または Neo4jTemplate、またはそのリアクティブバリアントを通じて直接使用できます。これらはすべて、Spring のアプリケーションレベルのトランザクションとの統合を提供します。下位レベルでは、Bolt ドライバーインスタンスを取得できますが、この場合は独自のトランザクションを管理する必要があります。

最新の Spring Boot アプリケーションでも Neo4j-OGM を使用できます。ただし、SDN 6 以降では使用できません。試行すると、2 つの異なる (無関係な) 永続コンテキストに 2 つの異なるエンティティセットが存在することになります。Neo4j-OGM 3.2.x にこだわりたい場合は、Spring Boot によってインスタンス化された Java ドライバーを使用し、それを Neo4j-OGM セッションに渡します。Neo4j-OGM 3.2.x は引き続きサポートされており、Quarkus などのフレームワークでの使用をお勧めします。ただし、Spring Boot アプリケーションでは、主に SDN を選択する必要があります。

必ず参照してください。よくある質問では、マッピングの決定に関する多くの繰り返しの質問に対処するだけでなく、Neo4j AuraDB (英語) やオンプレミスクラスターデプロイなどの Neo4j クラスターインスタンスとの対話を大幅に改善する方法についても説明しています。

理解しておくべき重要な概念は、Neo4j ブックマーク、Spring Retry [GitHub] (英語) Resilience4j [GitHub] (英語) などの適切な再試行メカニズムを組み込むことの潜在的な必要性 (英語) (この知識は Spring 以外にも適用できるため、後者をお勧めします)、Neo4j クラスターのコンテキストにおける読み取り専用クエリと書き込みクエリの重要性です。