0

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

public class Topic {

    ...

    @RelatedTo(type = "MADE_OF", direction = Direction.OUTGOING)
    public Set<Topic> madeOf;

    @RelatedTo(type = "MADE_OF", direction = Direction.INCOMING)
    public Set<Topic> partOf;

}

现在,这会在其他地方实例化,例如:

    Topic myTopic = new Topic();
    madeOf.addAll(some list of topics with empty partOf already in the graph);
    myTopic = template.save(myTopic());

现在,如果我检查 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.createRelationshipBetween(...) 明确地将关系添加到 Neo4JTemplate,也会发生相同的行为。

有任何想法吗?

4

2 回答 2

1

在您执行 a 之后,template.save您可以执行 atemplate.fetch(myTopic.getMadeOf())以一次性获取所有相关主题,然后以通常的方式使用myTopic

于 2013-04-30T04:30:38.323 回答
0

默认情况下启用简单映射,所有关系都是延迟获取的。如果您希望它们被热切加载,请在您的关系上使用@Fetch(因此是 madeOf 和 partOf)。

@Fetch
@RelatedTo(type = "MADE_OF", direction = Direction.OUTGOING)
public Set<Topic> madeOf;
于 2013-04-30T10:49:53.803 回答