我在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
来对节点进行查找。
是否有我缺少的设置?
答案 0 :(得分:0)
@Query
返回了不需要的结果。您可以使用快照构建再试一次吗?
http://repo.spring.io/libs-snapshot/org/springframework/data/spring-data-neo4j/4.0.0.BUILD-SNAPSHOT/