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 驱动,在映射框架与驱动之间不再引入额外的“驱动”或“传输”层。Neo4j Java 驱动——有时俗称 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。
请务必阅读常见问题(FAQ),其中我们解答了关于映射决策的许多反复出现的问题,也说明了如何显著改善与 Neo4j AuraDB 等 Neo4j 集群实例以及本地集群部署的交互。
需要理解的重要概念包括 Neo4j 书签、为引入恰当的重试机制(如 Spring Retry 或 Resilience4j,我们推荐后者,因为这方面的知识在 Spring 之外同样适用)而可能存在的需求,以及在 Neo4j 集群上下文中只读查询与写查询的重要性。