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 对象图映射器)现在包含在此模块本身中。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 书签、可能需要整合适当的重试机制,例如Spring Retry或Resilience4j(我们推荐后者,因为此知识也适用于 Spring 之外),以及在 Neo4j 集群上下文中只读查询与写入查询的重要性。