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 是一个对象图映射(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 客户端和响应式客户端功能,恢复了在纯驱动程序之上使用模板的想法,简化了数据库访问
我们提供仓库作为存储和查询文档的高级抽象,以及用于通用域访问或通用查询执行的模板和客户端。所有这些都与 Spring 的应用事务集成。
Neo4j 支持的核心功能可以直接使用,通过 Neo4jClient
或 Neo4jTemplate
或其响应式变体。它们都与 Spring 的应用层事务集成。在较低级别,您可以获取 Bolt 驱动程序实例,但在这些情况下,您必须自己管理事务。
您仍然可以使用 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 和本地集群部署)交互的常见问题。
重要概念包括 Neo4j Bookmarks,可能需要包含适当的重试机制,例如 Spring Retry 或 Resilience4j(我们推荐后者,因为此知识也适用于 Spring 之外),以及读写查询在 Neo4j 集群上下文中的重要性。