neo4j-与java建立独特的关系
我想使用JavaAPI创建一个唯一的关系(通过Cypher查询,我可以创建唯一的) 例如:neo4j-与java建立独特的关系,java,neo4j,cypher,Java,Neo4j,Cypher,我想使用JavaAPI创建一个唯一的关系(通过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的级别较低。据我所知,没有方便的方法,所以您需要自己编写代码。未经测试,但您可能会想
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();
}
Transaction-Transaction=graphDb.beginTx();
试一试{
ReadableIndex autoNodeIndex=graphDb.index().GetNodeAutoIndex().getAutoIndex();
Node n=autoNodeIndex.get(“name”,“Neo”).getSingle();
节点a=autoNodeIndex.get(“名称”、“架构师”).getSingle();
tx.acquireWriteLock(n);
tx.acquireWriteLock(a);
布尔值=假;
for(Relationship r:n.getRelationships(MyRels.SPEAKS_WITH){
if(r.getOtherNode(n).equals(a)){//如果需要,请在此处放置其他条件
创建=真;
打破
}
}
如果(!已创建){
n、 createRelationshipTo(a,MyRels.Talking_);
}
成功();
}最后{
tx.finish();
}
更新Mattias的评论这将不是线程安全的,如果有两个事务同时执行此操作,则可能会创建两个关系。如果您希望n和a是线程/事务安全的,请手动获取锁。谢谢Mattias。我稍后将尝试找出如何执行此操作。K,我想我已将其添加到了中。