添加关系后需要再次找到节点实体(neo4j/java/spring)

添加关系后需要再次找到节点实体(neo4j/java/spring),java,neo4j,spring-data-neo4j,Java,Neo4j,Spring Data Neo4j,我已经对一个类主题使用了@NodeEntity注释。在主题中有以下内容:(为了简洁起见,我已经缩小了错误范围,所以我只写代码的相关部分。) 现在,如果我检查myTopic.madeOf中的主题集,它们都是空的,即使它们都应该包括myTopic。或者,如果我这样做: Topic myTopic = new Topic(); madeOf.addAll(some list of topics with empty partOf already in the graph); m

我已经对一个类主题使用了@NodeEntity注释。在主题中有以下内容:(为了简洁起见,我已经缩小了错误范围,所以我只写代码的相关部分。)

现在,如果我检查myTopic.madeOf中的主题集,它们都是空的,即使它们都应该包括myTopic。或者,如果我这样做:

    Topic myTopic = new Topic();
    madeOf.addAll(some list of topics with empty partOf already in the graph);
    myTopic = template.save(myTopic());
    myTopic = template.findOne(myTopic());
现在检查同样的事情,一切都是它应该的。显然,反复查找这个实体会大大降低代码的速度。即使我使用template.createRelationshipInterween(…)显式地将关系添加到Neo4JTemplate,也会发生相同的行为


有什么想法吗?

在你做了一个
模板后。保存
你可以做一个
模板。获取(myTopic.getMadeOf())
一次获取所有相关主题,然后以通常的方式使用myTopic。默认情况下,启用简单映射后,所有关系都会被延迟获取。如果你想让它们被急切地载入,在你的关系中使用(因此madeOf和partOf)

@Fetch
@与(type=“MADE_OF”,direction=direction.OUTGOING)相关
公共设置;

我假设“template.save(myTopic())”是一个拼写错误,您的意思是“template.save(myTopic)”,非常感谢。有没有办法让这个更干净?我习惯于科学计算,通常构建独立的命令行,所以我对所有的注释业务都有点陌生。@MichaelJarretBaume你是说我或Gopi的答案吗?@tstorms Gopi。考虑到我当前的设置,每个主题内部的延迟加载并不理想。不过,我仍然认为有一种方法可以让注释继续工作。@Gopi,有,看到我的答案了吗?我通常不会使用@Fetch,以避免一直获取所有内容。另一件事是,在这种情况下,如果您使用@Fetch,您必须非常小心地实现toString()和类似的方法,或者如果您试图使用一些库将对象转换为某种格式,例如json,因为它很容易导致无限循环。
    Topic myTopic = new Topic();
    madeOf.addAll(some list of topics with empty partOf already in the graph);
    myTopic = template.save(myTopic());
    Topic myTopic = new Topic();
    madeOf.addAll(some list of topics with empty partOf already in the graph);
    myTopic = template.save(myTopic());
    myTopic = template.findOne(myTopic());
@Fetch
@RelatedTo(type = "MADE_OF", direction = Direction.OUTGOING)
public Set<Topic> madeOf;