介绍 Spring Data Neo4j
Spring Data Neo4j,简称SDN,是由Neo4j公司与VMware的Spring Data团队紧密合作开发和维护的下一代Spring Data模块。 它支持所有官方支持的 Neo4j 版本,包括 Neo4j AuraDB。 Spring Data Neo4j 项目将上述 Spring Data 概念应用于使用 Neo4j 图存储库开发解决方案。
SDN 完全依赖于 Neo4j Java 驱动,没有在映射框架与驱动之间引入另一个“驱动程序”或“传输”层。Neo4j Java 驱动程序——有时称为 Bolt 或 Bolt 驱动程序——作为一种协议使用,类似于 JDBC 在关系数据库中的应用。
SDN 是一个对象图映射(OGM)库。OGM 将图中的节点和关系映射到域模型中的对象和引用。对象实例映射到节点,而对象引用则通过关系映射,或序列化到属性(例如引用日期)。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 框架本身和 Spring Data 中,完全支持 Reactive 编程模型
-
Neo4j 客户端和响应式客户端功能,复兴了模板取代普通驱动的理念,简化了数据库访问
我们提供用于存储和查询文档的高层抽象仓库,以及用于通用域访问或通用查询执行的模板和客户端。所有这些都集成于 Spring 的应用事务中。
Neo4j 支持的核心功能可以通过以下以下方式直接使用,Neo4jClient或者Neo4j模板或者其响应式变体。它们都支持与 Spring 应用级事务的集成。在较低层级,你可以获取 Bolt 驱动实例,但在这种情况下你必须自己管理事务。
| 即使在现代的 Spring Boot 应用中,你仍然可以使用 Neo4j-OGM。但你不能用它来搭配 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 集群中只读与写查询的重要性。