我有一个密码查询,该查询应该返回节点和边,以便可以在Web应用程序中呈现图形的表示形式。我正在使用query
Neo4jOperations中的方法运行它。
start n=node({id}) match n-[support:SUPPORTED_BY|INTERPRETS*0..5]->(argument:ArgumentNode)
return argument, support
之前,我使用的是带有嵌入式数据库的spring数据neo4j 3.3.1,该查询在返回具有起始节点和结束节点的关系代理方面做得很好。我已经升级到spring数据neo4j 4.0.0,并切换到使用远程服务器,现在它返回的是悲惨的空LinkedHashMaps。
这是来自服务器的json响应:
{"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。该查询应返回通过type的边关联的两个节点INTERPRETS
。在响应中,您将看到[{}]
,这是有关边缘的数据应位于的位置。
如何获得所需数据的响应?
免责声明:这不是一个明确的答案,这只是我到目前为止所完成的。
您可以在中使用queryForObjects
方法Neo4jOperations
,并确保查询返回路径。例子:
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:
对于检索映射对象的查询方法,建议的查询格式是返回路径,该路径应确保正确映射已知类型并适当地将它们与关系连接在一起。
解释为什么queryForObjects有帮助:
在后台,不同类型的查询之间存在区别。它们具有GraphModelQuery
,RowModelQuery
和GraphRowModelQuery
,每个都将不同的排列传递resultDataContents: ["row", "graph"]
给服务器。如果您需要足够的数据来重建图形,则需要确保“图形”在列表中。
您可以在以下代码中找到此代码ExecuteQueriesDelegate
:
if (type != null && session.metaData().classInfo(type.getSimpleName()) != null) {
Query qry = new GraphModelQuery(cypher, parameters);
...
} else {
RowModelQuery qry = new RowModelQuery(cypher, parameters);
...
}
使用queryForObjects可以提供一种类型,并将其插入GraphModelQuery模式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句