使用Spring 2.3.4之前,我一直在使用@QueryResult注释来映射一些定制的Cypher查询响应到POJO。我现在正在测试SpringBoot2.4第一个RC,并试图遵循关于如何删除OGM的说明,因为支持已经被移除。我成功地将其他注释替换为这里提供的注释:https://neo4j.github.io/sdn-rx/current/#migrating,但现在只剩下我的@QueryResult注释,没有为其指定任何注释。当我删除它们时,我会得到映射错误:
org.springframework.data.mapping.MappingException: Could not find mappable nodes or relationships inside Record我已经查找了一些映射解释,但问题是:我的自定义POJO不代表数据库中的任何实体,也不代表实体的一部分。它们是来自不同节点的相关比特。让我举个例子:我想从a获得所有作为MY_REL关系目标的b节点:
(a:Node {label:"my label"})-[:MY_REL]->(b:Node)出于我的目的,我不需要获取响应中的节点,所以我的POJO只有两个属性:
我还给你这个:
RETURN a.label AS source, COLLECT(b.label) AS targets
我的POJO只是用@QueryResult注释,以便完成映射。有谁知道如何在Sb2.4版本的候选版本中重现这种行为吗?正如我所说的,删除现在错误的注释会提示我映射错误,但我不知道该如何替换它。
发布于 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事务。
当涉及到预测的时候,有很多东西在里面,所以我建议也读文件中的章节。
https://stackoverflow.com/questions/64718174
复制相似问题