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
前もって感謝します!
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();
}
マティアスのコメントを更新