- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
7.9 高级映射模型
Spring Data Neo4j 也提供了更为高级的映射模式。它与简单映射模式的主要区别在于它提供了图的一个活跃(live)视图,并将其投影到领域对象。所以,每个域的访问会被拦截并被路由到对应的属性或关系(对于 @RelatedTo[Via]的域)上。这个拦截在内部使用了 AspectJ 以发挥其魔力。
我们可以通过添加 org.springframework.data:spring-data-neo4j-aspects 依赖,然后配置 AspectJ 构建插件或激活加载时织入(load-time-weaving)来启用高级映射模式,如示例 7-25 所示。
示例 7-25 搭建 Spring Data Neo4j 高级映射
任何时候域都会自动从图中进行读取,但是对于操作中的即时写入必须要包含在一个事务之中。因为对象可以在事务之外进行修改,所以会建立对象的关联/分离(attached/detached)生命周期。从图中加载的对象或者刚刚在一个事务中保存的对象是关联的;如果一个对象在事务外进行了修改或者是新创建的,那它就是分离的。对分离的对象进行修改只会保存在这个对象之中,而且只会在进行下次保存操作的时候才能反映到图中,这会使得实体再次变成关联的。
图数据库的活跃视图允许更为快速地进行操作以及对图“直接”修改。修改会立即体现到其他的图操作中,如遍历、Cypher 查询或 Neo4j 核心 API。因为读取都会基于当前的图,其他事务所提交的变化会立即可见。因为都是直接读取图数据库,所以在高级映射模式下没有必要进行抓取处理和设置 @Fetch 注解。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论