2015-11-02 9 views
5

Uso del nuovo OGM Neo4j 2.3. Quando si cerca di caricare le entità da id Ho il seguente problema:Errore durante il caricamento della relazione ricorsiva per loadAll tramite ID

@NodeEntity 
class Person { 
    Long id; 
    String name; 

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

assumendo (1, "Alex") è diventato amico di (2, "Giuseppe") e (3, "I Griffin"). (4, "Nati") è diventato amico di (5, "Amit"), utilizzando il seguente codice:

session.loadAll (Person.class, Arrays.toList (nuova Lunga() { 1L, 4L}), 1)

dovrebbe restituire 2 Person oggetti, Alex contenente due amici (Guy, Joseph) e Nati contenente uno amico ancora cosa restituisce in realtà è 5 oggetti (Alex , Guy, Joseph, Nati, Amit). Sebbene Mike e Nati contengano i loro amici all'interno, sembra strano (e certamente indesiderato) che ho richiesto Persona s da due id e ho ottenuto un Iterable contenente 5. Qualcuno sa perché questo è? è un insetto?

risposta

1

Questo problema è stato risolto nella build 1.1.4-SNAPSHOT.

+0

Grande! Grazie per la soluzione rapida! – Nayish

1

Questo è di progettazione. L'OGM ha un concetto di profondità di ricerca. Per impostazione predefinita (e nel tuo esempio, esplicitamente) la profondità di ricerca è 1, cioè recupera gli oggetti richiesti dal grafico insieme ai loro vicini immediati. È possibile impostare la profondità di ricerca in modo esplicito se non si desidera questo comportamento. Impostandolo a zero in questo modo:

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

recupererà solo gli oggetti richiesti.

+0

Penso che tu non abbia capito cosa succede, restituisce Alex (contenente Giuseppe e Guy) e Nati (contenente Amit) fino a qui va tutto bene, ma ciò che è strano è che restituisce anche altri 3 oggetti Person (Amit, Joseph and Gut) nell'Iterable. d'altra parte se Persona ha una relazione con un oggetto di tipo Job, non la carica nel iterabile ma la restituisce solo sotto l'oggetto Persona appropriato. Solo perché l'oggetto figlio è dello stesso tipo del genitore, lo aggiunge all'Iterable – Nayish

+0

'session.loadAll (Person.class, Arrays.toList (new Long() {1L, 4L}), 0)' non popolerà la relazione degli amici sugli oggetti Alex e Nati – Nayish

+1

Scusami Nayish, ho frainteso quello che stavi dicendo. Sì, mi aspetterei che venissero creati cinque oggetti, ma l'Iterable mi aspetterei di contenere solo i due oggetti richiesti da id. Quindi questo sembra un bug e ho raccolto un ticket per questo qui: https://github.com/neo4j/neo4j-ogm/issues/79 – Vince