3

Java API を使用して一意の関係を作成したい (Cypher クエリから一意に作成できます)。

例えば:

START n=node:node_auto_index(name='Neo'), 
      t=node:node_auto_index(name='The Architect') 
CREATE UNIQUE n-[r:SPEAKS_WITH]-t 
RETURN n AS Neo,r

前もって感謝します!

4

1 に答える 1

3

Java API は下位レベルです。私の知る限り、これには便利な方法がないため、実際に自分でコーディングする必要があります。テストされていませんが、おそらく次のアイデアが得られます。

Transaction transaction = graphDb.beginTx();
try {
  ReadableIndex<Node> autoNodeIndex = graphDb.index().getNodeAutoIndexer().getAutoIndex();
  Node n = autoNodeIndex.get("name", "Neo").getSingle();
  Node a = autoNodeIndex.get("name", "The Architect").getSingle();
  tx.acquireWriteLock(n);
  tx.acquireWriteLock(a);
  Boolean created = false;
  for(Relationship r : n.getRelationships(MyRels.SPEAKS_WITH) {
    if(r.getOtherNode(n).equals(a)) { // put other conditions here, if needed
      created = true;
      break;
    }
  }
  if(!created) {
    n.createRelationshipTo(a, MyRels.SPEAKS_WITH);
  }
  tx.success();
} finally {
  tx.finish();
}

マティアスのコメントを更新

于 2013-08-21T12:34:01.297 に答える