2015-11-02 25 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; 
} 

假設(1, 「亞歷克斯」)朋友(2, 「約瑟夫」)(3, 「人」 )(4, 「那提」)是朋友(5, 「阿密特」),使用下面的代碼:

session.loadAll(Person.class,Arrays.toList(新龍(){ 1L,4L}),1)

應該返回2個對象,包含亞歷克斯2個朋友(蓋伊,約瑟夫)和含有那提一個朋友但它實際上返回的是5個對象(亞歷克斯,Guy,Joseph,Nati,Amit)。儘管Mike和Nati確實包含了他們的朋友,但是我通過兩個ID請求Person s並且得到了一個包含5的Iterable,這似乎很奇怪(當然也是不需要的)。有人知道這是爲什麼嗎?這是一個錯誤?

回答

1

現在在1.1.4-SNAPSHOT構建中修復了此問題。

+0

太棒了!感謝您的快速解決! – Nayish

1

這是設計。 OGM具有搜索深度的概念。默認情況下(在您的示例中,顯式地)搜索深度爲1,意思是從圖中連同它們的直接鄰居一起獲取請求的對象。如果您不想要這種行爲,可以明確設置搜索深度。將它設置爲如下零:

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

將只提取請求的對象。

+0

我認爲你沒有明白髮生了什麼,它返回亞歷克斯(包含約瑟夫和蓋伊)和納提(含阿米特),直到這裏一切順利,但奇怪的是它還返回3個更多的人物(阿米特,約瑟夫和古特)在Iterable中。另一方面,如果Person與Job類型的對象有關係,則它不會將其加載到迭代器中,而只會將其返回到適當的Person對象下面。只是因爲子對象與父類型相同,所以它將它添加到session.loadAll(Person.class,Arrays.toList(new Long(){1L,4L}),0)'不會填充到Iterable – Nayish

+0

Alex和Nati的朋友關係 – Nayish

+1

對不起Nayish,我誤解了你在說什麼。是的,我期望創建五個對象,但Iterable我希望只包含id所請求的兩個對象。所以這看起來像一個錯誤,我已經在這裏提出了一張票:https://github.com/neo4j/neo4j-ogm/issues/79 – Vince