Spring Data Neo4j 中的自定义查询未检索关系
Custom query in Spring Data Neo4j not retrieving relationships
因此,对于一些复杂的操作,我在图形存储库中的自定义查找器方法上使用 @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
自定义查询 (@Query) 不支持深度参数,它们会准确映射查询 return 的内容。如果您正在 returning 单个节点,它将映射该单个节点。查询不会在运行时修改以包含额外的关系。
您可以 return 节点 ID,然后 load
使用默认深度 (1) 或自定义深度。
在未来的版本中,SDN 4 将能够将自定义查询中的多个实体 return 映射到域实体。
同时,它似乎适用于深度 1。结果节点包含对关系对象的非 null
引用。但重要的是您 return 所有 3 个结果:节点 (n
)、关系类型 (r
)、关系节点 (u
)、e。 g.:
@Query("MATCH(n:MyEntity) MATCH (n)-[r:MY_REL_TYPE]-(u) RETURN n, r, u LIMIT {0}")
List<MyEntity> getAll(int limit);
因此,对于一些复杂的操作,我在图形存储库中的自定义查找器方法上使用 @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
自定义查询 (@Query) 不支持深度参数,它们会准确映射查询 return 的内容。如果您正在 returning 单个节点,它将映射该单个节点。查询不会在运行时修改以包含额外的关系。
您可以 return 节点 ID,然后 load
使用默认深度 (1) 或自定义深度。
在未来的版本中,SDN 4 将能够将自定义查询中的多个实体 return 映射到域实体。
同时,它似乎适用于深度 1。结果节点包含对关系对象的非 null
引用。但重要的是您 return 所有 3 个结果:节点 (n
)、关系类型 (r
)、关系节点 (u
)、e。 g.:
@Query("MATCH(n:MyEntity) MATCH (n)-[r:MY_REL_TYPE]-(u) RETURN n, r, u LIMIT {0}")
List<MyEntity> getAll(int limit);