Neo4j 如何正确实现getOrCreateNodeWithUniqueFactory方法

Neo4j 如何正确实现getOrCreateNodeWithUniqueFactory方法,neo4j,Neo4j,嗯, 整个程序都是我自己设计的 除了函数:getOrCreateNodeWithUniqueFactory() ( 它的意思是,当我创建一个新节点而不检查它是否已经存在时,它就可以工作,但这不是我的目标。我的目标是当实体存在时,不创建一个新节点。 ) 所以我在这里查过了 现在我有三个选项,但我喜欢第一个或第二个选项(密码和唯一约束或唯一工厂) 我不知道每个示例的所有代码行是在同一个范围(同一个函数)中,还是在两个单独的函数中 如果有必要,在两个单独的函数中,当我调用它们时?如果您可以使用唯一约束

嗯, 整个程序都是我自己设计的 除了函数:
getOrCreateNodeWithUniqueFactory()

( 它的意思是,当我创建一个新节点而不检查它是否已经存在时,它就可以工作,但这不是我的目标。我的目标是当实体存在时,不创建一个新节点。 )

所以我在这里查过了

现在我有三个选项,但我喜欢第一个或第二个选项(密码和唯一约束或唯一工厂)

我不知道每个示例的所有代码行是在同一个范围(同一个函数)中,还是在两个单独的函数中
如果有必要,在两个单独的函数中,当我调用它们时?

如果您可以使用唯一约束和cypher
MERGE
,这应该足够好了

否则,我通常会为我的唯一节点工厂创建一个类

class UserUniqueFactory extends UniqueFactory.UniqueNodeFactory {
    public PersonUniqueFactory(GraphDatabaseService graphDb) { 
       super( graphDb, "users" );
    }

    @Override
    protected void initialize( Node created, Map<String, Object> properties )
    {
        created.addLabel( DynamicLabel.label( "User" ) );
        created.setProperty( "name", properties.get( "name" ) );
    }
    public Node create(String username) {
       return getOrCreate("name",username);
    }
};
factory = new UserUniqueNodeFactory(graphDb);
try ( Transaction tx = graphDb.beginTx() )
{
    Node node = factory.create(username);
    tx.success();
    return node;
}