查询两个相关类型

时间:2017-07-26 12:26:54

标签: neo4j spring-data-neo4j-4

背景

我们正在使用Spring Data Neo4j over HTTP驱动程序。我们正在使用Neo4j 3.2 Docker镜像。

我们有三种节点类型,包括Label(aka tag)和Project,其中每个项目节点可以链接到多个标签节点,反之亦然。

查询

我正在通过GraphRepository执行以下查询:

@Query("MATCH (label:Label)-[]-(project:Project)"
       + "RETURN (label:Label)-[]-(project:Project)")
public Iterable<Label> findAllWithProjects() throws CypherException;

返回所有Project节点及其链接的Label节点。

问题

我收到以下错误:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.neo4j.ogm.exception.CypherException: Error executing Cypher "Neo.ClientError.Statement.EntityNotFound"; Code: Neo.ClientError.Statement.EntityNotFound; Description: Unable to load NODE with id 1207.] with root cause
org.neo4j.ogm.exception.CypherException: Error executing Cypher "Neo.ClientError.Statement.EntityNotFound"; Code: Neo.ClientError.Statement.EntityNotFound; Description: Unable to load NODE with id 1207.

问题出现在生产系统上。以前使用过相同的查询,它目前适用于开发和登台环境。

疑难解答

  1. 我已根据帖子neo4j EntityNotFound prevents cypher match from working中的建议删除了schema/label文件夹,但这没有帮助。
  2. 我使用HTTP POST到neo4j服务器在生产服务器上执行相同的查询,它似乎有效。
  3. 我尝试使用http://localhost:7474/db/data/node/1207查找节点,但它返回404 Not Found。
  4. 我尝试从我的应用程序中删除该节点,但再次找不到它。我还使用多个查询执行删除与该节点的所有关系,如:

    MATCH (label:Label)-[r:LABELED_PROJECTS]-(project:Project)
    WHERE id(project) = 1207
    DELETE r
    

    我用不同类型的节点(id = 1207)执行了一些这些查询并返回,但是所有这些查询都返回了空结果。

  5. 我调整了查询​​,添加了一个如下条件,这使得它可以从应用程序中运行:

    MATCH (label:Label)-[]-(project:Project)
    WHERE NOT id(project) = 1207
    RETURN (label:Label)-[]-(project:Project)
    

0 个答案:

没有答案