跳到主要内容

介绍 Spring Data Neo4j

DeepSeek V3 中英对照 Introducing Spring Data Neo4j

Spring Data Neo4j,简称 SDN,是由 Neo4j, Inc.VMware 的 Spring Data 团队紧密合作创建和维护的下一代 Spring Data 模块。它支持所有官方发布的 Neo4j 版本,包括 Neo4j AuraDB。Spring Data Neo4j 项目将上述 Spring Data 概念应用于使用 Neo4j 图数据存储的解决方案开发中。

SDN 完全依赖于 Neo4j Java Driver,在映射框架和驱动之间没有引入另一个“驱动”或“传输”层。Neo4j Java Driver——有时被称为 Bolt 或 Bolt 驱动——被用作一种协议,就像 JDBC 在关系型数据库中的作用一样。

SDN 是一个对象图映射(OGM)库。OGM 将图中的节点和关系映射到领域模型中的对象和引用。对象实例被映射为节点,而对象引用则通过关系进行映射,或序列化为属性(例如引用一个 Date 类型)。JVM 的原生类型被映射为节点或关系的属性。OGM 对数据库进行了抽象,并提供了一种便捷的方式,将领域模型持久化到图中并进行查询,而无需直接使用底层驱动。它还允许开发者在 SDN 生成的查询不够用时,提供自定义查询。

SDN 是之前 SDN 版本 5 的官方继任者,本文档将其称为 SDN+OGM。SDN 版本 5 使用了独立的对象映射框架,类似于 Spring Data JPA 与 JPA 的关系。该独立层(即 Neo4j-OGM,Neo4j 对象图映射器)现在已包含在此模块中。Spring Data Neo4j 本身是一个对象映射器,专门用于 Spring 和 Spring Boot 应用程序以及某些受支持的 Jakarta EE 环境中。它不需要也不支持单独的对象映射器实现。

当前 SDN 版本与之前的 SDN+OGM 相比,具有以下显著特点:

  • SDN 本身是一个完整的 OGM(对象图映射)

  • 完全支持不可变实体,因此完全支持 Kotlin 的数据类

  • 完全支持 Spring 框架本身和 Spring Data 中的响应式编程模型

  • Neo4j 客户端和响应式客户端特性,重新引入了基于原生驱动程序的模板概念,简化了数据库访问

我们提供了存储库作为存储和查询文档的高级抽象,以及用于通用领域访问或通用查询执行的模板和客户端。所有这些都与 Spring 的应用事务集成在一起。

Neo4j 支持的核心功能可以直接通过 Neo4jClientNeo4jTemplate 或其响应式变体来使用。它们都提供了与 Spring 应用级事务的集成。在更低层级上,你可以获取 Bolt 驱动实例,但在这种情况下,你需要自己管理事务。

备注

你仍然可以在现代的 Spring Boot 应用中使用 Neo4j-OGM。但是,你不能在 SDN 6+ 中使用它。如果你尝试这样做,你将会在两个不同且无关的持久化上下文中拥有两组不同的实体。因此,如果你坚持使用 Neo4j-OGM 3.2.x,你可以使用由 Spring Boot 实例化的 Java 驱动程序,并将其传递给 Neo4j-OGM 会话。Neo4j-OGM 3.2.x 仍然受支持,我们推荐在诸如 Quarkus 的框架中使用它。然而,在 Spring Boot 应用中,你的首选应该是 SDN。

请确保您阅读了常见问题,我们在其中解答了许多关于我们映射决策的常见问题,同时也探讨了如何显著改善与 Neo4j 集群实例(如 Neo4j AuraDB)以及本地集群部署的交互。

需要理解的重要概念包括 Neo4j 书签、可能需要 引入适当的重试机制(如 Spring RetryResilience4j,我们推荐后者,因为其知识也适用于 Spring 之外的场景)以及在 Neo4j 集群中读写查询的重要性。