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 无法知道您在密码声明中使用了哪些标识符。
我有一个带有可分页列表的 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 无法知道您在密码声明中使用了哪些标识符。