【问题标题】:Custom query in Spring Data Neo4j not retrieving relationshipsSpring Data Neo4j 中的自定义查询不检索关系
【发布时间】:2016-01-07 14:27:22
【问题描述】:

因此,对于一些复杂的操作,我在我的图形存储库中的自定义查找器方法上使用 @Query 注释使用自定义 Cypher 查询。但是,在检索节点时,它不会检索其直接关系(即只有 1 级)。

@Query("match (node:T) return node Order by node.requestedAt Desc LIMIT 100")
List<T> last100T();

@Query("match (node:T) where node.status = \"REQUESTED\" and  timestamp() - node.requestedAt >= 60000 return node")
List<Transit> findUnmatchedAndExpiredT();

我是这样使用它们的 - (代码在 groovy 中):

 def nodes = TRepository.findUnmatchedAndExpiredT()
    nodes.forEach({
        node ->
            node.status = TStatus.DECLINED
            node.neighbourA.status = NeighbourAStatus.BARRED
            def neighbourBQueue = client.queue(node.neighbourB.username)
            neighbourBQueue.push(mapper.writeValueAsString(node))

    TRepository.save(node)
})

它们是这样相关的:

    @NodeEntity
class T{

    public T(){
    }

    @GraphId
    Long id

    @Relationship(type = "REQUESTED_BY", direction = Relationship.OUTGOING)
    NeighbourB neighbourB

    @Relationship(type = "SERVICED_BY", direction = Relationship.OUTGOING)
    NeighbourA neighbourA
}

当关系确实存在时,邻居 A 和 B 都为空。做什么?我正在使用 Spring boot 1.2.7.RELEASE 和 spring-data-neo4j:4.0.0.RELEASE

【问题讨论】:

    标签: java spring groovy spring-data-neo4j-4 neo4j-ogm


    【解决方案1】:

    自定义查询 (@Query) 不支持深度参数,它们准确映射查询返回的内容。如果您返回单个节点,它将映射该单个节点。查询不会在运行时修改以包含额外的关系。

    您可以改为返回节点 ID,然后使用默认深度 (1) 或自定义深度 load 它。

    在未来的版本中,SDN 4 将能够将自定义查询中返回的多个实体映射到域实体。

    【讨论】:

    • 这里是这个问题的相关问题:DATAGRAPH-782DATAGRAPH-771DATAGRAPH-700。也可以看看this article关于自定义查询的使用。
    • “在未来的版本中” - 两年后这个功能还在吗?没有关系的实体几乎没用。
    • SDN 4 已经将自定义查询中返回的实体映射到域实体。
    • 我使用的是 SDN 5,它不返回关系。我需要做一些特别的事情吗?
    【解决方案2】:

    与此同时,它似乎适用于深度 1。结果节点包含对关系对象的非null 引用。但重要的是您返回所有 3 个结果:节点 (n)、关系类型 (r)、关系节点 (u),例如。 g.:

    @Query("MATCH(n:MyEntity) MATCH (n)-[r:MY_REL_TYPE]-(u) RETURN n, r, u LIMIT {0}")
    List<MyEntity> getAll(int limit);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 2015-12-07
      相关资源
      最近更新 更多