在 SDN4 neo4jOperations.queryForObjects returns 中具有空集合的实体。怎么解决?

In SDN4 neo4jOperations.queryForObjects returns entities with empty collections. How to solve?

我有实体,看起来像这样:

@NodeEntity
class User {
    String name;
    boolean male;
    <...>
    @Relationship(type = "friend")
    Set<User> friends;
    @Relationship(type = "participation")
    Set<Event> events;
    <...>
}

为了查询男性用户我使用了下面的代码:

String q = "MATCH (u:User) WHERE u.male=true RETURN u";
Iterable<User> maleUsers = neo4jOperations.queryForObjects(User.class, q, emptyMap());

但它 return 的用户的好友和事件集合为空。

试图解决问题我得到了以下代码:

String q = "MATCH (u:User) WHERE u.male=true WITH u MATCH p=(u)-[*0..1]-() RETURN p";
Iterable<User> maleUsers = neo4jOperations.queryForObjects(User.class, q, emptyMap());

现在集合已初始化。但是这个改动带来了一个新的问题:

如何正确解决我的问题?非常感谢任何想法!

PS: 我使用 Spring Data Neo4j 4.1.0.M1.

这是因为您 return 一条包含许多用户实体的路径,而 OGM 无法判断您要返回哪一个。 最好的方法是使用 session.query:

Result result = session.query("MATCH (u:User) WHERE u.male=true WITH u MATCH p=(u)-[*0..1]-() RETURN u as user, nodes(p),rels(p)",emptyMap());

然后从 result 中检索每个 user,其中将映射朋友和事件。