Neo4j Spring OGM查询的实体列表始终返回不同的字符

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

假设我有一个图表:

A - follows -> B
A - follows -> C

现在,我有一个查询来获取BC的关注者(应该返回2次A)。

MATCH (a)<-[:FOLLOWS]-(followers) 
WHERE a.username IN ['B','C']
RETURN followers

如果我通过Neo4J浏览器进行此查询,则会得到2条记录:A节点2次。这是正确的。

如果我通过Spring Repository进行相同的查询,则会得到仅包含1对象(A)的列表。

因此,通过Spring的存储库,对实体的任何查询都像我添加了DISTINCT一样执行,因此常规查询和DISTINCT之间没有区别。

如果我查询节点的某些属性,即A.username,则会得到一个包含两个重复字符串的列表(按预期)。

  1. 这是预期的行为吗?
  2. 为什么?
  3. 是否有一种方法可以查询具有重复项的完整实体,相同Cypher查询在Neo4J本身中的工作方式?
spring neo4j cypher neo4j-ogm
1个回答
0
投票

通常,此行为是正确的:A始终相同,并且被映射为一个对象。两次创建相同的对象没有任何意义。

我从您的问题中不知道查询应映射到什么。但是假设它应该为此查询创建List<A>,这是正确的。返回a.username不会映射到任何实体,而只能在投影/ @QueryResult中收集。此结果没有相等或相似的概念,并且将始终为响应中返回的任何“行”创建结果。

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