SDN4中如何获取自定义查询中的直接关系实体和直接相关节点?

How to get the direct relationship entities and directly related nodes in custom query in SDN4?

我的存储库中有一个带注释的查找器方法:

@Query("MATCH (me:User)<-[ab:ASKED_BY]-(q:Question) WHERE id(me) = {0} RETURN q")
Iterable<Question> findQuestionsByUserId(Long id);

我喜欢的对象:

@NodeEntity
public class Question {
    private AskedBy askedBy;

    @Relationship(type = "TAGGED_WITH")
    private Set<Tag> tags = new HashSet<>();
//...
}

@RelationshipEntity(type = "ASKED_BY")
public class AskedBy {
    @GraphId private Long id;

    @StartNode
    private User user;

    @EndNode
    private Question question;

    // other props
}

当我调用存储库方法时,askedBy 字段在结果中是 null。如何用关系填充该字段?

更新:

我尝试使用会话 loadAll(collection) 加载关系,但没有帮助。

    final Collection<Question> questions = (Collection<Question>) questionRepository.findQuestionsByUserId(user.getId());
    final Question q = questions.iterator().next();
    System.out.println("After `findQuestionsByUserId`:");
    System.out.println("`q.getTags().size()`: " + q.getTags().size());
    System.out.println("`q.getAskedBy()`: " + q.getAskedBy());
    neo4jOperations.loadAll(questions, 1);
    System.out.println("After `neo4jOperations.loadAll(questions, 1)`:");
    System.out.println("`q.getTags().size()`: " + q.getTags().size());
    System.out.println("`q.getAskedBy()`: " + q.getAskedBy());
    final Collection<AskedBy> askedByCollection = neo4jOperations.loadAll(AskedBy.class);
    System.out.println("`askedByCollection.size()`: " + askedByCollection.size());

上面的代码片段输出

findQuestionsByUserId之后:
q.getTags().size(): 0
q.getAskedBy(): 空
neo4jOperations.loadAll(questions, 1)之后:
q.getTags().size(): 1
q.getAskedBy(): 空
askedByCollection.size(): 0

自定义查询的默认深度似乎为 0,由于某些未知原因我无法加载关系实体。

图表看起来不错:

目前,自定义查询不支持深度参数(在路线图上),因此您有以下选择-

a) 使用 repository.findOne(userId)(默认深度为 1,因此它应该加载 AskedBy)。或者使用 repository.findOne(userId,depth) 自定义深度。或者使用 Neo4jTemplate.load(type,id,depth)

b) 如果您需要查询多个 id,请在接受一组 org.neo4j.ogm.cypher.Filterorg.neo4j.ogm.session.Session 上使用 loadAll 方法。 MusicIntegrationTest

中可用的示例

c) 继续自定义查询,但在您取回实体 ID 后,通过提供自定义深度的 load* 方法加载它。