2015-11-02 7 views
5

新しいNeo4j 2.3 OGMの使用。 idでエンティティをロードしようとしたときに、私は次のような問題があります。loadAllによるidsによる再帰的関係のロードエラー

@NodeEntity 
class Person { 
    Long id; 
    String name; 

    @Relationship(type="Friend", direction = Direction.OUTGOING) 
    public List<Person> friends; 
} 

をが(2、 "ヨセフ")(3、 "ガイ" と友達である(1、 "アレックス")を想定し)

session.loadAll(Person.class、Arrays.toList(新しいロング(){:(4、 "ナティ")は、次のコードを使用して(5、 "アミット")、と友達であります1L、4L})、1)

(アレックス・5つのオブジェクトであるアレックスが2人の友人(ガイ、ジョセフ)を含むとナティは、それが実際に返すものをまだ1人の友人を含む、2つのオブジェクトを返す必要があります、ガイ、ジョセフ、ナティ、アミット)。 MikeとNatiは彼らの中に友人を含んでいますが、私が要求したような奇妙な(そして確かに望ましくない)ようです。Person 2つのIDで5つのIterableを持っています。これはバグですか?

答えて

1

この問題は、1.1.4-SNAPSHOTビルドで修正されました。

+0

素晴らしい!迅速な修正をありがとう! – Nayish

1

これは仕様です。 OGMには、検索の深さの概念があります。デフォルトでは(そしてあなたの例では明示的に)検索の深さは1です。つまり、要求されたオブジェクトを、その隣のオブジェクトとともにグラフから取得します。この動作が必要ない場合は、検索の深さを明示的に設定できます。これを0のように設定します。

session.loadAll(Person.class, Arrays.toList(new Long() { 1L, 4L }), 0) 

は、要求されたオブジェクトをフェッチします。

+0

私は思ったことを思いつきませんでしたが、それはAlex(JosephとGuyを含む)とNati(Amitを含む)を返すことになりましたが、ここまでうまくいっていますが、それはさらに3つのPersonオブジェクト(Amit、Joseph and Gut )を繰り返します。一方、PersonがJob型のオブジェクトとの関係を持っていれば、iterableにこれをロードせず、適切なPersonオブジェクトの下に返すだけです。子オブジェクトが同じタイプの親オブジェクトであるため、Iterable – Nayish

+0

'session.loadAll(Person.class、Arrays.toList(new Long(){1L、4L})、0)'に追加します。アレックスとナティの友人関係 – Nayish

+1

申し訳ありませんが、ナイッシュは、あなたが言っていたことを誤解しました。はい、私は5つのオブジェクトが作成されると思いますが、Iterableではidによって要求された2つのオブジェクトのみが含まれることが予想されます。だからこれはバグのように見え、私はここでそのチケットを調達しています:https://github.com/neo4j/neo4j-ogm/issues/79 – Vince

関連する問題