Introducing Spring Data Neo4j

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

SDN 完全依赖 Neo4j Java Driver,而不会在映射框架和驱动程序之间引入另一个“驱动程序”或“传输”层。Neo4j Java 驱动程序(有时称为 Bolt 或 Bolt 驱动程序)用作一种类似于关系数据库使用 JDBC 的协议。

SDN 是一个对象图映射 (OGM) 库。OGM 将图形中的节点和关系映射到域模型中的对象和引用。对象实例映射到节点,而对象引用使用关系映射或者序列化为属性(例如对 Date 的引用)。JVM 基本类型映射到节点或关系属性。OGM 抽象了数据库,并提供了一种便捷的方法,让你能够在图形中持久存储域模型,并直接查询它,而无需使用低级驱动程序。它还为开发人员提供了灵活性,允许他们在 SDN 生成的查询不足时提供自定义查询。

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

与之前的 SDN+OGM 相比,新版 SDN 中有以下突出的功能差异:

  • SDN 本身是一个完整的 OGM

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

  • Spring Framework 本身和 Spring Data 以及 Neo4j 客户端和响应式客户端功能对响应式编程模型提供完全支持,恢复在普通驱动程序中使用模板的想法,从而简化数据库访问

  • 对所有 Spring 生态系统的人来说都是新手,包括 Spring Framework、Spring Data、具体模块(在本例中是 Spring Data Neo4j)和 Neo4j。

我们提供 repositories 作为一种高级抽象,用于存储和查询文档以及模板和客户端以进行通用域访问或通用查询执行。它们全部与 Spring 的应用程序事务相集成。

可以通过 Neo4jClientNeo4jTemplate 或其反应性变体,直接使用 Neo4j 支持的核心功能。它们全部与 Spring 的应用程序级事务相集成。在较低级别,你可以获取 Bolt 驱动程序实例,但在这种情况下,你就必须自行管理自己的事务。

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

请务必阅读 Frequently Asked Questions,其中我们解决了关于我们的映射决策的许多经常出现的问题,但也解决了如何显着改善与 Neo4j 集群实例(例如 Neo4j AuraDB)和内部部署集群的交互。

要理解的重要概念是 Neo4j 书签、 the potential need 以纳入正确的重试机制,例如 Spring RetryResilience4j(我们推荐后者,因为此知识同样适用于 Spring 之外)以及在 Neo4j 集群上下文中只读查询相对于写查询的重要性。