返回介绍

7.8 事务、实体生命周期以及抓取策略

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

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(...) 方法将会从图中加载数据并对其进行更新。

发布评论

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