我在项目中使用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个相同类型的关系,而获取所有这些关系将占用机器的内存
谁能解释为什么会这样?
答案 0 :(得分:0)
此行为的原因不是错误,而是Cypher查询的性质。 您不能单独加载关系。 必须有开始和结束节点才能形成正确的查询。
然后将深度应用于两个节点。 当然,如果您已经从某个关系到节点进行了“跳变”,则这或多或少是一种定义,但这肯定也会对Neo4j-OGM中的常规深度模型提出质疑,因为突然之间每个关系(无需接触节点)都会计为跳数,而到达该节点将是下一跳。