首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SDN+OGM切换到SDN/RX时替换@QueryResult

从SDN+OGM切换到SDN/RX时替换@QueryResult
EN

Stack Overflow用户
提问于 2020-11-06 16:20:50
回答 1查看 1.5K关注 0票数 4

使用Spring 2.3.4之前,我一直在使用@QueryResult注释来映射一些定制的Cypher查询响应到POJO。我现在正在测试SpringBoot2.4第一个RC,并试图遵循关于如何删除OGM的说明,因为支持已经被移除。我成功地将其他注释替换为这里提供的注释:https://neo4j.github.io/sdn-rx/current/#migrating,但现在只剩下我的@QueryResult注释,没有为其指定任何注释。当我删除它们时,我会得到映射错误:

代码语言:javascript
复制
org.springframework.data.mapping.MappingException: Could not find mappable nodes or relationships inside Record

我已经查找了一些映射解释,但问题是:我的自定义POJO不代表数据库中的任何实体,也不代表实体的一部分。它们是来自不同节点的相关比特。让我举个例子:我想从a获得所有作为MY_REL关系目标的b节点:

代码语言:javascript
复制
(a:Node {label:"my label"})-[:MY_REL]->(b:Node)

出于我的目的,我不需要获取响应中的节点,所以我的POJO只有两个属性:

  • 一个“源”字符串,它是开始节点的标签
  • 一组“目标”字符串,它是终端节点的标签列表。

我还给你这个:

RETURN a.label AS source, COLLECT(b.label) AS targets

我的POJO只是用@QueryResult注释,以便完成映射。有谁知道如何在Sb2.4版本的候选版本中重现这种行为吗?正如我所说的,删除现在错误的注释会提示我映射错误,但我不知道该如何替换它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-11 09:17:38

Spring Neo4j 6现在支持与其他Spring数据模块一致的预测(以前称为@QueryResult)。尽管如此,假设这个@Query是用Neo4jRepository<Node,...>编写的,那么最简单的事情就是返回a

我知道这听起来很荒谬,但通过选择存储库抽象,您可以说在映射阶段应该处理的所有东西都是Node,您希望将其属性(或子集)投影到POJO (DTO投影)中。SDN无法确保在启动映射时确实使用正确的类型,因此它会抛出所面临的异常。Neo4j-OGM在映射@QueryResult的幕后更加放松,但不幸的是,这个方向也错了。

如果您的用例如您所描述的那样简单,我强烈建议您使用Neo4jClient(博士)来直接访问映射。它有一个用于查询和手动映射的流畅API,并且它参与正在运行的Spring事务。

当涉及到预测的时候,有很多东西在里面,所以我建议也读文件中的章节

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64718174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档