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 回答