深度为1的关系实体也将获取Node的关系

时间:2019-01-23 19:39:17

标签: java neo4j spring-data-neo4j neo4j-ogm

我在项目中使用neo4j-ogm 3.1.5。

在我的代码中,当我使用depth = 1获取任何关系实体时,它正在获取startNode和endNode,并且也在获取startNode和endNode的关系。基本上,depth参数用作depth = depth + 1,因为在获取关系实体时会将相同的depth值传递给节点。

AFAIK理解的深度参数的使用基本上像休眠的 LAZY EAGER 加载一样。 在SchemaRelationshipLoadClauseBuilder类中,它发生在方法中

public String build(String variable, String label, int depth)

复制步骤

使用findById方法获取关系实体

当前实施

SchemaRelationshipLoadClauseBuilder中,以下方法:

public String build(String variable, String label, int depth)
  • 呼叫expand(sb, "n", start, depth)而不是expand(sb, "n", start, depth-1),并且
  • 呼叫expand(sb, "m", end, depth)而不是expand(sb, "m", end, depth-1)

问题是,这将在我的项目中引起问题,因为各个关系实体的startNode和endNode可能具有超过100000个相同类型的关系,而获取所有这些关系将占用机器的内存

谁能解释为什么会这样?

1 个答案:

答案 0 :(得分:0)

此行为的原因不是错误,而是Cypher查询的性质。 您不能单独加载关系。 必须有开始和结束节点才能形成正确的查询。

然后将深度应用于两个节点。 当然,如果您已经从某个关系到节点进行了“跳变”,则这或多或少是一种定义,但这肯定也会对Neo4j-OGM中的常规深度模型提出质疑,因为突然之间每个关系(无需接触节点)都会计为跳数,而到达该节点将是下一跳。