1

私は現在、各インデックスに 2 つのノードと関係 (Part_1 -> Part_2) が含まれている配列を反復処理しており、Neo4jTemplate.save() メソッドを使用してデータベースに永続化しています。ただし、一部のインデックスには、他のノードと関係を持つ繰り返しノードがあります (Part_2 -> Part_3)。私のバージョンでは現在、ノードが既に存在する場合にマージするのではなく、毎回新しいノードと関係を作成します。

この投稿を読みましたが、2 つの同じノードが同じ ID を持つように実装する方法がわかりません。私の現在のコードは次のように機能します:

  1. 2 つのノードを作成する
  2. 関係を築く
  3. ノードに関係を追加する
  4. Neo4jTemplate.save() を使用して永続化します

CREATE ではなく MERGE に変更する必要があるのは何ですか? 永続化する前にチェックを行う必要がありますか、または SDN 4 で永続化している間にチェックする方法はありますか?

編集:

Neo4jTemplate.query() メソッドを使用して Cyper クエリを作成することにしましたが、複数のノードをマージするためのパラメーターを正しく作成する方法がわかりません。1 つのノードに対して、次のように MERGE ステートメントを正しく作成できます。

Map<String, Object> params = new HashMap<String, Object>();
Map<String, Object> node = new HashMap<String, Object>();

node.put("名前", "Part_1");
params.put("props", node_1);
String query = "MERGE( n1:Part {name:{props}.name} )";

template.query(クエリ、パラメータ);

私の目標は、2 つのノードでマージを呼び出してから、マージを再度呼び出して、1 つのステートメントで関係を作成することです。私のコードは今次のようになります:

Map<String, Object> params = new HashMap<String, Object>();
List<Map<String, Object>> マップ;
Map<String, Object> node1 = new HashMap<String, Object>();
Map<String, Object> node2 = new HashMap<String, Object>();

node1.put("name1", "Part_1");
node2.put("name2", "Part_2");
maps = Arrays.asList(node_1, node_2)

params.put("props", maps);
文字列クエリ = "MERGE( n1:Part {name:{props}.name1} )
MERGE( n2:Part {name:{props}.name2 )
MERGE(n1)-[:CREATED]->(n2)";

template.query(クエリ、パラメータ);

これまでに見た、パラメーターに複数のノードを含むすべてのは、呼び出されたときに単に全体を反復処理するだけです。参照している特定のノードを指定できるパラメーターを持つ例は見つかりませんでした。特定のノードを参照するパラメータを作成するにはどうすればよいですか? 前もって感謝します!

4

1 に答える 1

3

コードを見ずに何を変更するかを提案するのは難しいですが、毎回新しいエンティティ インスタンスを保存しているように思えます

渡されたエンティティはNeo4jTemplate.save(entity)、データベースに書き込まれた後、ID で更新する必要があります。SDN は既に ID を持っているノードを更新しようとするため、新しいエンティティ インスタンスを作成する代わりに、エンティティ インスタンスを再利用することをお勧めします。

これらのエンティティを自分で管理したくない場合は、ステップ 1 でエンティティを読み込んでから、エンティティがまだ存在しない場合にのみ作成することができます。

于 2015-08-13T19:38:15.860 に答える