当前位置: 首页 > 知识库问答 >
问题:

如何使用Neo4jTemplate合并而不是创建

张啸
2023-03-14

我目前正在迭代一个数组,其中每个索引包含两个节点和一个关系(第1部分)-

我读了这篇文章,但我不明白如何实现它,使两个相同的节点具有相同的ID。我现在的代码是这样的:

  1. 创建两个节点
  2. 创造他们的关系
  3. 将关系添加到节点
  4. 坚持使用Neo4jTemplate.save()

我需要更改什么以合并而不是创建?我是否需要在持久化之前进行检查,或者在持久化SDN 4时是否有方法进行检查?

编辑:

我决定使用Neo4jTemplate。方法编写Cyper查询,但是我不知道如何正确创建用于合并多个节点的参数。我可以像这样为一个节点正确创建合并语句:

地图

node.put("name","Part_1");
params.put("props",node_1);
字符串查询="MERGE(n1: Part{name:{props}. name})";

样板查询(查询,参数);

我的目标是在两个节点上调用merge,然后再次调用merge以在一条语句中创建关系。我现在的代码如下所示:

地图

点头。投入(“名称1”、“第1部分”)
节点2。投入(“名称2”、“第2部分”)
映射=数组。asList(节点1、节点2)

params.put("props",贴图);
字符串查询="MERGE(n1: Part{name:{props}. name1})
MERGE(n2: Part{name:{props}. name2)
MERGE(n1)-[: CREATED]-

样板查询(查询,参数);

到目前为止,我看到的所有参数中包含多个节点的示例都只是在调用时对整个过程进行迭代。我还没有发现任何示例具有参数,您可以在其中指定所引用的特定节点。如何创建引用某个节点的参数?提前谢谢!

共有1个答案

华谭三
2023-03-14

在不查看代码的情况下,很难建议更改什么,但听起来您每次都在保存新的实体实例。

传递给Neo4jTemplate的实体。保存(实体)应在写入数据库后使用ID进行更新。SDN将尝试更新已经有ID的节点,因此我建议重新使用实体实例,而不是创建新实例。

如果您不想自己管理这些实体,可以尝试在步骤1中加载实体,然后仅在实体不存在时创建它们。

 类似资料:
  • 问题内容: 无论Object.assign和对象传播只能做一浅合并。 问题的一个示例: 输出是您期望的。但是,如果我尝试这样做: 代替 你得到 x完全被覆盖,因为传播语法仅深入了一层。与相同。 有没有办法做到这一点? 问题答案: 有人知道ES6 / ES7规范中是否存在深度合并? 不,不是的。

  • Object.assign和Object spread仅进行浅合并。 问题的一个例子: 输出是您所期望的。但是,如果我尝试以下方法: 而不是 你得到 X被完全覆盖,因为扩展语法只深入一层。这与相同。 有办法做到这一点吗?

  • 问题内容: 我们知道快速排序是最快的排序算法。 JDK6 使用合并排序算法而不是快速排序。但是Arrays.sort使用快速排序算法。 Collections.sort使用合并排序而不是快速排序的原因是什么? 问题答案: 极有可能从乔希布洛赫§: 我确实写了这些方法,所以我想我有资格回答。确实没有最佳的排序算法。与mergesort相比,QuickSort有两个主要缺陷: 它不稳定(如parsif

  • react文档中提到了创建react应用程序的官方方法 我认为会自动检测纱线,但在我的情况下,它不会,并使用我不想要的npm创建reactapp。 我使用创建react-app的第二个选项,但它显示了多个警告: 那么有没有更好的方法用npx(使用纱线)创建react应用程序

  • 问题内容: 我找到了一篇有用的文章,解释了如何使Jersey使用SLF4J而不是JUL。现在,我的单元测试看起来像(并且很完美): 我的包括以下依赖项: 它运行完美,但是我不想在每个单元测试中都进行相同的配置。这是很明显的代码重复,我想避免。我怎样才能更有效地做到这一点? ps。也许不可能优化上面的代码,而我正在尽力而为? 问题答案: 最好的方法是通过自定义Listener。在JSF servle

  • 我正在迁移到“Linux应用服务”。不幸的是,它不支持WebJobs。在这里,它表示不会。它建议使用Azure函数。 我有一个没有触发器的连续应用程序。它应该一直在运行,就像这样: 我应该如何为这样的应用程序利用Azure功能?