因此,对于一些复杂的操作,我在我的图形存储库中使用@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-data-neo4j的Spring启动1.2.7.RELEASE:4.0.0.RELEASE
答案 0 :(得分:3)
自定义查询(@Query)不支持深度参数,它们准确映射查询返回的内容。如果您要返回单个节点,它将映射该单个节点。在运行时不会修改查询以包含额外的关系。
您可以改为返回节点ID,然后使用默认深度(1)或自定义深度load
返回它。
在将来的版本中,SDN 4将能够将自定义查询中返回的多个实体映射到域实体。
答案 1 :(得分:0)
同时,它似乎可用于深度1。结果节点包含对关系对象的非null
引用。但是,重要的是要返回所有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);