假设我有一个图表:
A - follows -> B
A - follows -> C
现在,我有一个查询来获取B
和C
的关注者(应该返回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
,则会得到一个包含两个重复字符串的列表(按预期)。
通常,此行为是正确的:A
始终相同,并且被映射为一个对象。两次创建相同的对象没有任何意义。
我从您的问题中不知道查询应映射到什么。但是假设它应该为此查询创建List<A>
,这是正确的。返回a.username
不会映射到任何实体,而只能在投影/ @QueryResult
中收集。此结果没有相等或相似的概念,并且将始终为响应中返回的任何“行”创建结果。