2015-11-02 11 views
5

Verwenden des neuen Neo4j 2.3 OGM. Beim Versuch, Entitäten zu laden, indem id habe ich folgendes Problem:Fehler beim Laden der rekursiven Beziehung durch loadAll nach IDs

@NodeEntity 
class Person { 
    Long id; 
    String name; 

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

vorausgesetzt (1, "Alex") ist befreundet mit (2, "Joseph") und (3, "Guy"). (4, "Nati") ist befreundet mit (5, "Amit"), mit dem folgenden Code:

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

sollte zurückkehren 2 Person Objekte, Alex mit zwei Freunde (Guy, Joseph) und Nati, die ein Freund noch, was es gibt tatsächlich 5 Objekte (Alex , Guy, Joseph, Nati, Amit). Obwohl Mike und Nati ihre Freunde darin enthalten, scheint es merkwürdig (und sicherlich unerwünscht), dass ich Person s durch zwei IDs anforderte und ein Iterable erhielt, das 5 enthält. Weiß jemand, warum das ist? Ist das ein Fehler?

Antwort

1

Dieses Problem ist jetzt in 1.1.4-SNAPSHOT Build behoben.

+0

Großartig! Danke für die schnelle Lösung! – Nayish

1

Dies ist von Entwurf. Die OGM hat ein Konzept der Suchtiefe. Standardmäßig (und in Ihrem Beispiel explizit) ist die Suchtiefe 1, dh die angeforderten Objekte werden zusammen mit ihren unmittelbaren Nachbarn aus dem Diagramm abgerufen. Sie können die Suchtiefe explizit festlegen, wenn Sie dieses Verhalten nicht möchten. Setzen Sie es auf Null wie folgt:

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

wird nur die angeforderten Objekte abrufen.

+0

Ich denke du hast nicht verstanden, was passiert, es gibt Alex (mit Joseph und Guy) und Nati (mit Amit) zurück, bis hier alles gut ist, aber was komisch ist, gibt auch 3 weitere Person Objekte (Amit, Joseph und Gut) im Iterablen. Auf der anderen Seite, wenn Person eine Beziehung zu einem Objekt vom Typ Job hatte, würde es dies nicht in das iterable laden, sondern nur unter das entsprechende Person-Objekt zurückgeben. Nur weil das Child-Objekt vom selben Typ ist wie der Eltern, fügt es es dem Iterable – Nayish

+0

'session.loadAll (Person.class, Arrays.toList (new Long() {1L, 4L}), 0)' nicht auffüllen die Freunde Beziehung auf den Alex und Nati Objekten – Nayish

+1

Sorry Nayish, ich missverstanden, was Sie sagten. Ja, ich würde erwarten, dass fünf Objekte erstellt werden, aber das Iterable, von dem ich erwarte, dass es nur die zwei Objekte enthält, die von ID angefordert werden. Das sieht also nach einem Fehler aus und ich habe hier ein Ticket dafür erstellt: https://github.com/neo4j/neo4j-ogm/issues/79 – Vince