无法将查询结果映射到 Neo4j 中的 Spring Boot 数据类

问题描述 投票:0回答:1

我目前正在尝试在 Neo4j 数据库中查询从一个节点到另一个节点的所有路径。我已经能够毫无问题地创建节点和关系。然而,当涉及到映射查询结果时,我本质上是试图获取两个节点之间的所有路径(带有节点和关系)并将其映射到 Kotlin 类,但出现了问题。

这是我的存储库层和相应的查询:

import com.nextbus.nextbusapi.DTO.RelationshipDTO
import com.nextbus.nextbusapi.entity.MyNode
import org.springframework.data.neo4j.repository.Neo4jRepository
import org.springframework.data.neo4j.repository.query.Query
import org.springframework.data.repository.query.Param

interface MyNodeRepository : Neo4jRepository<MyNode, Long>{
    fun findByName(name:String): MyNode?

    @Query(
        """MATCH p = ( :MyNode {name: 'istanbul'})-[*]-( :MyNode {name: 'ankara'})
           WITH relationships(p) AS rels
           RETURN collect(rels)""",
    )
    fun findPathsBetweenNodes(
        @Param("startNodeName") startNodeName: String,
        @Param("endNodeName") endNodeName: String
    ): List<List<RelationshipDTO>>
}

当我运行上面的查询时,Neo4j 浏览器中的返回值如下:

enter image description here

因此,拥有如下 DTO 对我来说似乎完全没问题:

data class RelationshipDTO(
    val identity: Long,
    val start: Long,
    val end: Long,
    val type: String,
    val properties: MutableMap<String, String>, 
    val elementId: String,
    val startNodeElementId: String,
    val endNodeElementId: String
)

但是,当我尝试在其中一个端点返回 DTO 时,出现以下错误:

2024-02-14T16:10:27.669 + 03:00错误1884 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]:servlet [dispatcherServlet]的Servlet.service() ] 在路径 [] 的上下文中抛出异常 [请求处理失败:org.springframework.dao.InvalidDataAccessApiUsageException:任何列表?不是一个带键的集合;错误代码“N/A”]及其根本原因

org.neo4j.driver.exceptions.value.NotMultiValued:任何列表?不是一个带键的集合

我还尝试将存储库函数的返回类型更改为 List,即使查询返回的值类似于:

enter image description here

响应中返回的是:

[ { “空”:假, “假”:假, “真假, “空”:假 } ]

我尝试访问存储在查询返回的路径变量中的变量(例如 path[0].values[0].values[0].adapted.start),但 IDE 不允许我这么做。不确定,但它可能与这些变量是“字段”有关

因此,如果您能帮我解决这个问题,我将非常感激。

spring-boot kotlin neo4j cypher
1个回答
0
投票

是的,我刚刚遇到了类似的问题,但我找到了解决方案,https://docs.spring.io/spring-data/neo4j/docs/6.0.15/reference/html/#projections.sdn.full-例子 这是官方的api链接,这可能会有所帮助,顺便说一句,neo4j的查询注释只能返回平面地图的结果,所以它可能不会返回List>

的值
© www.soinside.com 2019 - 2024. All rights reserved.