- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 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.8 事务、实体生命周期以及抓取策略
Neo4j 是完全事务化的数据库,Spring Data Neo4j 集成了(声明式)Spring 事务管理,这构建在 Neo4j 所提供的事务管理器之上,兼容于 Spring JtaTransactionManager。事务管理器的 bean 命名为 neo4jTransactionManager(别名为 transactionManager)是在<neo4j:config />元素中创建的。因为事务管理器是默认设置的,@Transactional 注解只需要定义事务作用域。对图数据库的所有写操作都需要事务,但是读不需要事务。可以进行事务嵌套,但是嵌套的事务只会参与正在运行的父事务(类似于 REQUIRED)。
Spring Data Neo4j 以及 Neo4j 本身都能集成外部的 XA 事务管理器;Neo4j 手册( http://www.springsource.org/spring-data/neo4j )对其进行了详细描述。
对于简单的映射模式来说,生命周期很简单直接:新的实体在存储到图中之前只是一个 POJO 实例,此时它会将这个元素(节点或关系)的内部 id 保存到具有 @GraphId 注解的域中,以用于随后的再次连接或合并。如果 id 没有设置的话,它会被作为新的实体来进行处理,当保存的时候会创建新的图元素。
当在简单映射模式下从图中抓取实体时,它们会自动分离开。数据会从图中复制出来并存储到领域对象实例中。使用简单映射模式中有一个很重要的方面就是抓取深度(fetch depth)。作为一种预防措施,在加载数据的时候,事务只会抓取实体的直接属性,默认并不会按照关系进行加载。
为了更为深入地对图进行抓取,需要在希望立即抓取的域上提供 @Fetch 注解。对于已经加载的实体和域,template.fetch(...) 方法将会从图中加载数据并对其进行更新。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论