我有实体,看起来像这样:
@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());
但它会返回有空朋友和事件集合的用户。
尝试解决问题我得到了以下代码:
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。
答案 0 :(得分:1)
这是因为您返回包含许多用户实体的路径,并且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
,其中会映射朋友和事件。