返回介绍

7.5 使用 Spring Data Neo4j 持久化领域对象

发布于 2025-04-22 19:57:19 字数 2226 浏览 0 评论 0 收藏

在将领域对象存储到图中之前,首先需要搭建工程。除了那些常用的 Spring 依赖,还需要添加 org.springframe work.data:spring-data-neo4j:2.1.0.RELEASE(对于简单映射)或 org.springframework.data:spring-data-neo4j-aspects:2.1.0.RELEASE(对于基于 AspectJ 的高级映射,参见 7.9 小节)的依赖。Neo4j 会自动引入进来(简单起见,假设是嵌入式的 Neo4j 部署)。

最少的 Spring 配置只是简单的命名空间设置,它同时会建立图数据库,如示例 7-13 所示。

示例 7-13 Spring 的搭建配置

c0713

如示例 7-14 所示,也可以传递 graphDatabaseService 实例到 neo4j:config 中,这样的话就可以配置图数据库的缓存、内存使用以及升级策略了。在这里甚至可以使用基于内存的 ImpermanentGraphDatabase 来进行测试。

示例 7-14 传递 graphDatabaseService 到配置之中

c0714-1

c0714-2

在定义了领域对象并将环境搭建起来之后,可以很容易地生成用于阐述用例的示例数据集(如示例 7-15 和图 7-4 所示)。用于阐述这个用例的领域类、数据集生成以及集成测试都能在本书的 GitHub 仓库中找到(更多信息可以参考 1.4 小节“示例代码”了解)。为了导入数据,可以填充领域类并使用 template.save(entity) 方法,这个方法会与图中已有的元素进行合并或者创建新的元素。这取决于映射 ID 以及可能存在的唯一域声明,它们可以用来识别图中我们要进行合并的已有实体。

示例 7-15 使用示例数据集填充图

c0715

这里显示的实体使用了一些便利的方法进行构造,从而提供了可读性更好的搭建过程,如图 7-4 所示。

0704

图 7-4 导入领域数据的图

7.5.1 Neo4jTemplate

Neo4jTemplate 类似于其他的 Spring 模板:在低层级的 API 之上构建了便利化 API,在这里低层级的 API 指的就是 Neo4j API。它添加了一些常见的便捷功能,如事务处理和异常转换,但更为重要的是对领域实体的自动化映射。Neo4jTemplate 也用于 Spring Data Neo4j 的其他基础设施之中。对其进行搭建时,需要在应用上下文中添加<neo4j:config/>或者创建实例,它要传递 Neo4j 的 GraphDatabaseService 进来(这个类可以作为 Spring Bean 来进行获取,如果想直接访问 Neo4j API,可以把它注入到代码之中)。

创建实体、节点和关系并且按照 id 对其进行查找和移除构成了基本的操作(save()、getOrCreateNode()、findOne()、getNode()、getRelationshipsBetween() 等)。其他的一些大多数机制都是以更为高级的方式在图中进行有趣的查找 - 使用 lookup() 方法进行索引查找、使用 query() 执行 Cypher 语句以及通过 traverse() 运行遍历。Neo4jTemplate 提供了 load() 方法将节点转换为实体或者将实体通过 projectTo() 方法转换为不同的类型(参见 7.7.1 小节的“单个节点的多重角色”)。懒加载的实体可以通过 fetch() 方法进行完整的加载。

通过 Neo4jTemplate 这个类就可以实现大多数你所希望的 Spring Data Neo4j 功能,但是对 Repository 的支持能够让你以更为便利的方式执行很多操作。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。