Cypher 查询的 order by 子句中缺少 属性 前缀

Missing property prefix in the order by clause of a Cypher query

我有一个带有可分页列表的 Spring Data Neo4j 存储库。

存储库如下所示:

public interface Neo4JPartRepository extends GraphRepository<Neo4JPart> {

  @Query("MATCH (p:Neo4JPart) RETURN p")
  public Page<Neo4JPart> all(Pageable page);

}

但是当我 运行 它时,生成的 Cypher 查询缺少 p。序列号前的前缀 属性:

message=serialNumber not defined (line 1, column 39 (offset: 38))
"MATCH (p:Neo4JPart) RETURN p ORDER BY serialNumber ASC SKIP 0 LIMIT 11"

如果我这样输入,Cypher 查询在浏览器客户端上运行良好:

MATCH (p:Neo4JPart) RETURN p ORDER BY p.serialNumber ASC SKIP 0 LIMIT 11

我使用 Neo4j 是不是做错了什么?

我必须说,我在这里做我的第一个 Neo4j 应用程序,我来自 JPA 世界,在那里我做了一些类似的事情,但效果很好。

JPA 存储库是:

@Query("SELECT u FROM User u")
public Page<User> all(Pageable page);

服务是:

@Override
public Page<User> all(Pageable page) {
  logger.debug("============>> Sort: " + page.getSort());
    return userRepository.all(page);
}

控制台日志显示:

============>> Sort: firstname: ASC

及以下:

select
    user0_.id as id1_18_,
    user0_.version as version2_18_,
    user0_.confirmed_email as confirme3_18_,
    user0_.email as email4_18_,
    user0_.firstname as firstnam5_18_,
    user0_.lastname as lastname6_18_,
    user0_.password as password7_18_,
    user0_.password_salt as password8_18_,
    user0_.readable_password as readable9_18_,
    user0_.work_phone as work_ph10_18_ 
from
    user_account user0_ 
order by
    user0_.firstname asc limit ?

更新: 如果我没有将任何排序顺序传递给 Cypher 查询并且存储库如下:

  @Query("MATCH (p:Neo4JPart) RETURN p ORDER BY p.serialNumber")
  public Page<Neo4JPart> all(Pageable page);

然后它工作正常并对返回的元素列表进行排序。

这是一种解决方法,但是,从 JPA 遗留的角度来看,它还没有按预期工作。

在您的排序中使用完全限定的名称,即 p.firstname

SDN 无法知道您在密码声明中使用了哪些标识符。