行,
我在http://architects.dzone.com/articles/and-now-something-completely中构建了整个程序
除了函数getOrCreateNodeWithUniqueFactory()
( 它的意思是当我创建一个新节点而不检查它是否已经存在然后它工作但它不是我的目标我的目标是当实体存在不创建新节点时。 )
现在我有三个选项,但我喜欢第一个或第二个选项(Cypher和unique constraints或UniqueFactory)
我无法弄清楚每个例子的所有代码行是否应该在同一范围内(相同的函数)或两个单独的函数 如果需要在两个单独的函数中,当我打电话给每个函数时?
答案 0 :(得分:2)
如果你可以使用唯一的约束和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;
}