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;
}