我在Neo4J 4.0.0.M1节点上做一个简单的骆驼案例查询:Spring Data Neo4J 4.0.0:按属性查找调用的正确顺序是什么?
UserRepository.findByUserId(String userId);
我可以在我的日志文件中看到,会生成正确的Cypher查询:
match (u:User) where u.userId = {0} return u
,我可以用返回一个节点预期的结果跑在Neo4j的浏览器的代码。我也可以看到正确生成的JSON
例如,
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
,它在节点上进行查找。
有没有我缺少的设置?
谢谢。我不确定这是否是需要一些额外配置的错误或4.0.0的新功能。 –