2016-04-02 1 views
0

私はこのようになりますエンティティを持っている:SDN4では、neo4jOperations.queryForObjectsは空のコレクションを持つエンティティを返します。の解き方?

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

しかし、それは友人やイベントの空のコレクションを持つユーザーを返します。私は、次のコードを使用する男性ユーザーを照会するために

@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 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を使用しています。

答えて

1

これは、多くのユーザーエンティティを含むパスを返すためです。これは、OGMがどちらのパスを返すかを指定できないためです。 これを行うための最善の方法は、session.queryを使用することです:resultから、その後

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()); 

とし、マッピングされた友人やイベントがあります各userを取得します。

+0

あなたの答えをありがとう!良いアイデアのようだ。しかし、ラベルのないノードがあるので(実際はNeo4j Spatialルートノードです)、私にとってはうまくいきません。それが存在するため、RestModelMapperファイルでNPEが発生します。 'nodeModel.getLabels()'は前述のノードの空の配列を返します。この行には、次の式が含まれています: 'metaData.resolve(nodeModel.getLabels())。getUnderlyingClass()'そのため、 'metaData.resolve(nodeModel.getLabels())'はnullを返します。そして、それは失敗します...私はこれで何ができますか? –

+1

残念ながら、これはバグです。私はhttps://github.com/neo4j/neo4j-ogm/issues/150を開いて追跡することができ、できるだけ早く修正されます。それを報告してくれてありがとう。 – Luanne

+0

努力のために大きな感謝!私は問題を追跡します。 –

関連する問題