我正在Spring Data v1.3.1中使用Spring Data Neo4J。我的Neo4J版本是2.1.6。 比方说,我有一个实体人员,其中可以有一个人名为Friend
的关系。因此,我将Set
定义为实体的属性之一,请使用@RelatedTo
注释并为其指定一个名称为Friend
的类型。如何在Neo4J/Spring中创建与同一实体的不同关系?
如果我想有多种其他的关系,都具有相同的实体而已,让我们说,Enemy
,Acquaintance
等我一定要定义,为所有这些单独的属性?我不能动态地传递关系吗?
参考:
@NodeEntity
public class Person {
@RelatedTo(type="FRIEND", direction=Direction.BOTH)
public @Fetch Set<Person> friends;
//Do I have to do it like this ? This is odd.
@RelatedTo(type="ENEMY", direction=Direction.BOTH)
public @Fetch Set<Person> enemies;
//getter setters
}
编辑1 -----------
现在,我面临的一个问题,在批量创建节点。解释下面的问题: 考虑迈克尔建议的方法后,这里是我的。 基本上,我必须批量创建大量节点。该节点Person
将具有包含唯一索引的属性。我们称之为name
。所以,当创建关系Friend
或Enemy
时,我希望它们与具有唯一名称的人一起创建。 因此,将有两个步骤:
创建个人节点(花费大量时间)
它们之间建立关系(并不需要太多的时间,30-40毫秒。 )
我尝试了批量创建节点的不同方法。
一种方法是提交事务节点中的某个号码已被保存后。 我曾跟随这个link 我不知道有关的性能改善与调用neo4jTemplate.save()
仍然需要大约500毫秒。
从我的日志:
Time taken to execute save:=612 ms
Time taken to execute save:=566 ms
难道这好吗?
另一种方法是使用暗号,由迈克尔在他的博客中建议,here.
我用这样的暗号查询:
WITH [{name: "Person1", gravity: 1},
{name: "Person2", gravity: 2}] AS group
FOREACH (person IN group |
CREATE (e:Person {label: person.name, gravity: person.gravity}))
这种方法问题的节点都得到批量创建,但名称属性上的唯一索引被忽略。看来,我必须在保存每个节点后进行提交。
那么,有没有其他办法,我可以以更快的方式批量创建节点?
我用我的最新发现更新了我的问题。您提出的方法确实解决了这个问题,但节点创建需要很长时间。你可以请看一下,让我知道,如果neo4j花费那么多时间来创建一个节点,或者建议任何其他方式都可以? –