【问题标题】:Relationship entities with depth 1 also fetching Node's relationships深度为 1 的关系实体也获取节点的关系
【发布时间】:2019-01-23 19:39:16
【问题描述】:

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

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

AFAIK 理解深度参数的使用基本上类似于休眠的 LAZYEAGER 加载。 在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 可以有超过 100 000 个相同类型的关系,并且获取所有这些关系会占用机器的内存.

谁能解释为什么会这样?

【问题讨论】:

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


    【解决方案1】:

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

    然后深度将应用于两个节点。 当然,这或多或少是一种定义,如果您已经从关系到节点进行了一次“跳跃”,但这肯定也会质疑 Neo4j-OGM 中的一般深度模型,因为突然之间每个关系(不接触节点)都会算作一跳,击中节点将是下一个。

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2014-03-08
      • 2023-01-22
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      相关资源
      最近更新 更多