Spring Data Neo4J 4.0.0:按属性查找的正确调用顺序是什么?

时间:2015-04-23 02:21:27

标签: neo4j spring-data-neo4j spring-data-neo4j-4

我在Neo4J 4.0.0.M1中的节点上进行简单的Camel Case查找:

e.g。

UserRepository.findByUserId(String userId);  

我可以在我的日志文件中看到生成了正确的Cypher查询:

match (u:User) where u.userId = {0} return u

我可以在Neo4J浏览器中运行此代码,并返回一个节点的预期结果。我还可以看到正确生成的JSON

e.g。

21:53:39.819 [tomcat-http--37] INFO  o.n.o.session.request.DefaultRequest - POST http://localhost:7474/db/data/transaction/commit, request: {"statements":[{"statement":"match (u:User) where u.userId = {0} return u","parameters":{"0":"145"},"resultDataContents":["graph"]}]}

我可以从PostMaster运行它,并获得返回一个节点的预期结果。

但是,在GraphRepository中通过带有命名查询的代码运行此代码会返回Neo4JSession中当前的每个节点。

这是UserRepository:

@Repository
public interface UserNodeRepository extends GraphRepository<User> {

    @Query ("match (u:User) where u.userId = {0} return u")
    public List<User> findByUserId(String userId);

}

运行此代码将返回我在Neo4J中创建过的用户。

请注意,我已将返回类型更改为List,因为返回的一个节点的预期行为未发生,并且我收到了映射异常。另请注意,此处有一个命名查询,因为我不确定问题可能与Camel Case查找与命名查询有关。

这在Neo4J 3.3.x中也能正常使用

此外,我已将问题追溯到Neo4JSession.query(),其中正在调用Neo4JSession.query,后者又执行以下操作:

return getResponseHandler().loadAll(type, response);

这将返回MappingContext中具有给定类类型的所有节点。我相信它应该调用Neo4JSession.loadByProperty来对节点进行查找。

是否有我缺少的设置?

1 个答案:

答案 0 :(得分:0)

在M1版本发布后,

@Query返回了不需要的结果。您可以使用快照构建再试一次吗?

http://repo.spring.io/libs-snapshot/org/springframework/data/spring-data-neo4j/4.0.0.BUILD-SNAPSHOT/