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

SDN 完全依赖于 Neo4j Java 驱动程序,无需在映射框架和驱动程序之间引入另一个“驱动程序”或“传输”层。Neo4j Java 驱动程序(有时称为 Bolt 或 Bolt 驱动程序)被用作协议,就像 JDBC 与关系数据库一样。Spring中文文档

SDN 是一个对象图映射 (OGM) 库。 OGM 将图中的节点和关系映射到域模型中的对象和引用。 对象实例映射到节点,而对象引用使用关系进行映射,或序列化为属性(例如,对 Date 的引用)。 JVM 基元映射到节点或关系属性。 OGM 对数据库进行抽象,并提供了一种方便的方法,可以在图中保存域模型并对其进行查询,而无需直接使用低级驱动程序。 它还为开发人员提供了灵活性,可以在 SDN 生成的查询不足的情况下提供自定义查询。Spring中文文档

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

将当前 SDN 版本与以前的 SDN+OGM 区分开来的值得注意的功能是Spring中文文档

  • SDN 本身就是一个完整的 OGMSpring中文文档

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

  • 完全支持 Spring Framework 本身和 Spring Data 中的反应式编程模型Spring中文文档

  • Neo4j 客户端和响应式客户端功能,在普通驱动程序上复活了模板的想法,简化了数据库访问Spring中文文档

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

Neo4j 支持的核心功能可以通过其 or 或 reactive 变体直接使用。 它们都提供了与 Spring 应用程序级事务的集成。 在较低级别上,您可以获取 Bolt 驱动程序实例,但在这些情况下,您必须管理自己的事务。Neo4jClientNeo4jTemplateSpring中文文档

您仍然可以使用 Neo4j-OGM,即使在现代 Spring Boot 应用程序中也是如此。 但是您不能将其与 SDN 6+ 一起使用。 如果您尝试过,您将在两个不同且不相关的持久性上下文中拥有两组不同的实体。 因此,如果你想坚持使用 Neo4j-OGM 3.2.x,你可以使用 Spring Boot 实例化的 Java 驱动程序,并将其传递给 Neo4j-OGM 会话。 Neo4j-OGM 3.2.x 仍然受支持,我们建议在 Quarkus 等框架中使用它。 但是,在 Spring Boot 应用程序中,您的首选应该是 SDN。
您仍然可以使用 Neo4j-OGM,即使在现代 Spring Boot 应用程序中也是如此。 但是您不能将其与 SDN 6+ 一起使用。 如果您尝试过,您将在两个不同且不相关的持久性上下文中拥有两组不同的实体。 因此,如果你想坚持使用 Neo4j-OGM 3.2.x,你可以使用 Spring Boot 实例化的 Java 驱动程序,并将其传递给 Neo4j-OGM 会话。 Neo4j-OGM 3.2.x 仍然受支持,我们建议在 Quarkus 等框架中使用它。 但是,在 Spring Boot 应用程序中,您的首选应该是 SDN。

请务必阅读常见问题解答,其中我们解决了许多关于我们的映射决策的反复出现的问题,以及如何显着改善与 Neo4j 集群实例(如 Neo4j AuraDB 和本地集群部署)的交互。Spring中文文档

需要了解的重要概念是 Neo4j 书签、合并适当的重试机制(如 Spring RetryResilience4j的潜在需求(我们推荐后者,因为这些知识也适用于 Spring 之外)以及 Neo4j 集群上下文中只读与写查询的重要性。Spring中文文档