2017-02-07 2 views
0

Ich habe zwei NodeEntity-Klassen, die in einer Viele-zu-Eins-Beziehung (wie in, VIELE zu eins) verwandt werden sollen. Angenommen, viele Entitäten A sind mit einer einzelnen Entität B verknüpft. Ich möchte Entität B mit einer Tiefe größer als 0 laden können, ohne die vielen zugehörigen Entitäten A zu laden, und muss tatsächlich niemals auf eine Entität A zugreifen von einer Entität B.Neo4j OGM-Beziehung nur in einer Entität

Ist es möglich, die Beziehung nur für Entität A anzugeben, die von Entität B ausgeschlossen wird, sodass beim Laden einer Entität B keine Entität A geladen wird, aber beim Laden einer Entität A eine Entität B geladen wird ? Ich bin besorgt über das Speichern der Entitäten danach, da ich die Beziehung beim Speichern einer Entität nicht verlieren möchte.

Antwort

3

Ja, Sie können dies tun. Überprüfen Sie diesen Testfall

@Test 
@Transactional 
public void shouldNotDeleteUnmappedRelations() throws Exception { 

    session.purgeDatabase(); 
    session.query("CREATE (a1:A) CREATE (a2:A) CREATE (b:B{name:'b'}) CREATE (a1)-[:REL]->(b) CREATE (a2)-[:REL]->(b) RETURN id(b) as id", Collections.emptyMap()); 

    Collection<B> res = session.loadAll(B.class, new Filters("name", "b"), 0); 
    B b = res.iterator().next(); 
    assertThat(b).isNotNull(); 

    session.save(b); 
    session.clear(); 

    Collection<A> allA = session.loadAll(A.class); 
    assertThat(allA).hasSize(2); 
    assertThat(allA).extracting("b").isNotNull(); 
} 
+0

Brilliant, funktioniert ein Trick! Es hat auch mit anderen Beziehungen auf B funktioniert und dann die Ladetiefe über 0 erhöht - die Objekte in den Beziehungen, die auf B definiert sind, wurden geladen, aber nicht die, die nur auf A definiert sind, was genau das ist, was ich brauchte – Xenopathic

Verwandte Themen