返回介绍

7.9 高级映射模型

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

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 高级映射

c0725-1

c0725-2

任何时候域都会自动从图中进行读取,但是对于操作中的即时写入必须要包含在一个事务之中。因为对象可以在事务之外进行修改,所以会建立对象的关联/分离(attached/detached)生命周期。从图中加载的对象或者刚刚在一个事务中保存的对象是关联的;如果一个对象在事务外进行了修改或者是新创建的,那它就是分离的。对分离的对象进行修改只会保存在这个对象之中,而且只会在进行下次保存操作的时候才能反映到图中,这会使得实体再次变成关联的。

图数据库的活跃视图允许更为快速地进行操作以及对图“直接”修改。修改会立即体现到其他的图操作中,如遍历、Cypher 查询或 Neo4j 核心 API。因为读取都会基于当前的图,其他事务所提交的变化会立即可见。因为都是直接读取图数据库,所以在高级映射模式下没有必要进行抓取处理和设置 @Fetch 注解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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