How do I query for relationship data in spring data neo4j 4?
我有一个密码查询,它应该返回节点和边,以便我可以在 Web 应用程序中呈现我的图形表示。我正在使用 Neo4jOperations 中的
1 2 | start n=node({id}) match n-[support:SUPPORTED_BY|INTERPRETS*0..5]->(argument:ArgumentNode) return argument, support |
之前,我使用带有嵌入式数据库的 spring data neo4j 3.3.1,这个查询在返回带有起始节点和结束节点的关系代理方面做得很好。我已经升级到 spring data neo4j 4.0.0 并切换到使用远程服务器,现在它返回可悲的空 LinkedHashMaps。
这是来自服务器的 json 响应:
1 2 3 4 5 | {"commit":"http://localhost:7474/db/data/transaction/7/commit","results":[{"columns":["argument","support"], "data":[ {"row":[{"buildVersion":-1},[]]}, {"row":[{"buildVersion":-1},[{}]]} ]}],"transaction":{"expires":"Mon, 12 Oct 2015 06:49:12 +0000"},"errors":[]} |
我通过在 DefaultRequest.java 中放置一个断点并执行 EntityUtils.toString(response.getEntity()) 获得了这个 json。该查询应该返回两个通过
如何获得所需数据的响应?
免责声明:这不是一个确定的答案,只是我到目前为止拼凑的答案。
您可以使用
1 | neo4jOperations.queryForObjects(ArgumentNode.class,"start n=node({id}) match path=n-[support:SUPPORTED_BY|INTERPRETS*0..5]->(argument:ArgumentNode) return path", params); |
返回的 POJO 应该根据它们的关系注释正确地连接在一起。现在您可以浏览它们并手动构建一组可以序列化的边。不理想,但可行。
建议您返回路径的文档:
来自 http://docs.spring.io/spring-data/data-neo4j/docs/4.0.0.RELEASE/reference/html/#_cypher_queries:
For the query methods that retrieve mapped objects, the recommended
query format is to return a path, which should ensure that known types
get mapped correctly and joined together with relationships as
appropriate.
为什么 queryForObjects 有帮助的解释:
在底层,不同类型的查询是有区别的。它们有
您可以在
中找到此代码
1 2 3 4 5 6 7 | if (type != null && session.metaData().classInfo(type.getSimpleName()) != null) { Query qry = new GraphModelQuery(cypher, parameters); ... } else { RowModelQuery qry = new RowModelQuery(cypher, parameters); ... } |
使用 queryForObjects 可以让你提供一个类型,并将事情转移到 GraphModelQuery 模式。