2017-05-17 4 views
0

Ich versuche ein funktionierendes System von einem eingebetteten Tomcat-Server mit Spring-Boot, Joiefaces und der eingebetteten neo4j -graph-database mit dem Objekt-Mapping OGM zu bekommen. Alles scheint gut zu funktionieren. Ich verpflichte meine Quellen zu https://svn.riouxsvn.com/circlead-embedd/circlead-embedded/Warum Neo4j-Ogm speichert Beziehungen zu eingebetteten neo4j-Datenbank nicht?

Das Problem ist, dass alle neo4j-ogm -examples (siehe heißt http://www.hascode.com/2016/07/object-graph-mapping-by-example-with-neo4j-ogm-and-java/) zeigen, dass @Relationship mit OGM arbeitet. Aber wenn ich es testen mit

@NodeEntity 
public abstract class GenericNode<T> implements INode<T> { 

    @GraphId 
    public Long id; 

    @SuppressWarnings("unused") 
    private void setId(Long id) { 
     this.id = id; 
    } 

    public String label; 

    @Relationship(type = "PARENT_OF", direction = Relationship.INCOMING) 
    public Set<T> parents = new HashSet<T>(); 

    @Relationship(type = "CHILD_OF", direction = Relationship.OUTGOING) 
    public Set<T> children = new HashSet<T>(); 

    ... 

dann alle Beziehungen scheinen nicht in der Datenbank geschrieben werden, da die Leitungen

Role rp = new Role("Role 1"); 
    Role rc = new Role("Role 2"); 
    rc.addParent(rp); 
    session.save(rc); 
    Iterable<Role> roles = session.query(Role.class, "MATCH (x) RETURN x;", Collections.<String, Object>emptyMap()); 

    for (Role role : roles) { 
     System.out.println(role); 
    } 

zeigen in der Konsole, die die Beziehungen der Datenbank fehlen. Es scheint, dass nur in der aktiven Sitzung Beziehungen gefunden werden. Nach einem Server-Neustart fehlen alle Beziehungen.

Role [id=52, label=Role 2, parents=[]] 
Role [id=53, label=Role 1, parents=[]] 
Role [id=54, label=Role 1, parents=[]] 
Role [id=55, label=Role 2, parents=[54]] 

Ich habe keine Ahnung, was diese Art von Fehler auftritt. Ich benutze neo4j-ogm 2.1.2 und neo4j 3.1.3.

Irgendeine Idee?

+0

Beachten Sie auch, dass Sie zwei Arten von Beziehung haben zwischen Eltern und Kind - 'PARENT_OF' und' CHILD_OF' - das ist normalerweise ein Modellierungsfehler und 1 Beziehung ist genug. Die Richtung der Beziehung sollte Ihnen die Semantik sagen - was ist ein Elternteil und was ist ein Kind. –

Antwort

0

Das Ergebnis, das Sie sehen, wird erwartet - neo4j-ogm mappt, was Sie in Ihrer Chiffre-Abfrage (plus, was Sie bereits in Ihrer Sitzung haben) zurückgeben. Wenn Sie auch verknüpfte Entitäten möchten, geben Sie die Beziehung und andere Knoten zurück: Wenn Sie möchten, dass z. nur Elternfeld hydratisiert:

MATCH (x)<-[r:PARENT_OF]-(p) RETURN x,r,p 

Dies wird nur die erste Stufe hydratisieren. Löschst du alle Ebenen (Elternteil eines Elternteils) Sie variabler Länge Pfad verwenden müssen und das Rück seine Knoten und Beziehungen (Rückkehr Pfade direkt nicht zuverlässig funktioniert):

MATCH p=(x)-[:PARENT_OF*..]-() RETURN nodes(p),rels(p) 
+0

Können Sie ein funktionierendes Beispiel bereitstellen? Denn ich verwende 'org.neo4j.ogm.model.Result result = session.query (" MATCH (x) - [r] - (x2) RETURN x, r, x2 ", Sammlungen. emptyMap(), wahr); \t \t für (Karte Karte: Ergebnis) { System.out.println ("C" + map.get ("x")); System.out.println ("R" + map.get ("r")); System.out.println ("P" + map.get ("x2")); } ' –

+0

ich bekomme C Rolle [ID = 3, Label = Rolle 2, Eltern = []] R (2) - [PARENT_OF] -> (3) P Rolle [ID = 2, Label = Rolle 1, eltern = []] C Rolle [ID = 4, Label = Rolle 2, Eltern = [5]] R (5) - [CHILD_OF] -> (4) P Rolle [ID = 5, Label = Rolle 1 , eltern = []] –

+0

Hinweis: Für was ist OGM nützlich, wenn es keine echte Zuordnung gibt und ich spezielle Abfragen für verschiedene Objektwerte benötigen. Gibt es eine Möglichkeit, ein echtes Mapping wie im Winterschlaf oder jpa zu bekommen? –

Verwandte Themen