gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:23:39 27 4
gpt4 key购买 nike

在 Spring Boot 2.3.4 之前,我一直在使用 @QueryResult 注释将一些自定义 Cypher 查询响应映射到 POJO。我现在正在测试 Spring Boot 2.4 first 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
我查阅了一些 Mapping 解释,但问题是:我的自定义 POJO 不代表数据库中的任何实体,也不代表实体的一部分。它们是来自不同节点的相当相关的位。
让我举例说明:
我想从 a 中获取作为 MY_REL 关系目标的所有 b 节点:
(a:Node {label:"my label"})-[:MY_REL]->(b:Node)
出于我的目的,我不需要在响应中获取节点,所以我的 POJO 只有 2 个属性:
  • 一个“源”字符串,它是开始节点的标签
  • 一个“目标”字符串集,它是端节点标签的列表

  • 我返回这个: RETURN a.label AS source, COLLECT(b.label) AS targets我的 POJO 只是用 @QueryResult 进行了注释,以便完成映射。
    有谁知道如何使用 SB 2.4 候选版本重现这种行为?正如我所说,删除现在有问题的注释会提示我一个 Mapping 错误,但我不知道我应该怎么做来替换它。

    最佳答案

    Spring Data Neo4j 6 现在支持与其他 Spring Data 模块一致的投影(以前称为 @QueryResult)。
    话虽如此,假设此 @Query,您必须做的最简单的事情写在 Neo4jRepository<Node,...> , 也会返回 a .
    我知道这首先听起来很荒谬,但是在选择存储库抽象时,您说在映射阶段应该处理的所有内容都是 Node并且您想将其属性(或子集)投影到 POJO(DTO 投影)中。 SDN 在开始映射时无法确保您确实在使用正确的类型,因此它会抛出您面临的异常。 Neo4j-OGM 在幕后更轻松地映射 @QueryResult s 但不幸的是,这个方向也错了。
    如果您的用例如您所描述的那样简单,我强烈建议您使用 Neo4jClient (docs)这使您可以直接访问映射。
    它有一个用于查询和手动映射的流畅 API,并且它参与您的存储库正在运行的正在进行的 Spring 事务。
    有很多关于预测的内容,所以我建议也阅读 the section in the documentation .

    关于java - 从 SDN+OGM 切换到 SDN/RX 时替换 @QueryResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64718174/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com