2017-03-18 2 views
0

Ich habe eine folgende Basisentität:Spring Data Neo4j 4, OGM und @Relationship Anmerkung

@NodeEntity 
public class Likeable extends Authorable { 

    private final static String CONTAINS = "CONTAINS"; 

    @Relationship(type = CONTAINS, direction = Relationship.INCOMING) 
    private Set<Like> likes = new HashSet<>(); 

    private long totalLikes; 

    private long totalDislikes; 

    private double likeSum; 

    public long getTotalLikes() { 
     return totalLikes; 
    } 

    public void setTotalLikes(long totalLikes) { 
     this.totalLikes = totalLikes; 
    } 

    public long getTotalDislikes() { 
     return totalDislikes; 
    } 

    public void setTotalDislikes(long totalDislikes) { 
     this.totalDislikes = totalDislikes; 
    } 

    public double getLikeSum() { 
     return likeSum; 
    } 

    public void setLikeSum(double likeSum) { 
     this.likeSum = likeSum; 
    } 

} 

mit einem aktuellen Klasse alles funktioniert gut, aber wenn ich hinzufügen likes Getter/Setter zu dieser Klasse:

public Set<Like> getLikes() { 
    return likes; 
} 

public void setLikes(Set<Like> likes) { 
    this.likes = likes; 
} 

meine Tests scheitern mit einem Assertion Fehler (keine Ausnahmen) .. zum Beispiel nach dem Löschen Abfrage.

Aber nach

@Relationship(type = CONTAINS, direction = Relationship.INCOMING) 

über Getter/Setter alles zu arbeiten beginnt wieder gut und fügte hinzu:

@NodeEntity 
public class Likeable extends Authorable { 

    private final static String CONTAINS = "CONTAINS"; 

    @Relationship(type = CONTAINS, direction = Relationship.INCOMING) 
    private Set<Like> likes = new HashSet<>(); 

    private long totalLikes; 

    private long totalDislikes; 

    private double likeSum; 

    @Relationship(type = CONTAINS, direction = Relationship.INCOMING) 
    public Set<Like> getLikes() { 
     return likes; 
    } 

    @Relationship(type = CONTAINS, direction = Relationship.INCOMING) 
    public void setLikes(Set<Like> likes) { 
     this.likes = likes; 
    } 
... 

} 

Ist es ein richtig kommentierte NodeEntity Klasse? Eine solche Erklärung ist für mich ein wenig überflüssig. Könnten Sie bitte in diesem Fall eine korrekte Erklärung abgeben?

Antwort

4

Ja, dies ist der richtige Weg, um es jetzt zu implementieren - ab neo4j-ogm Version 2.1.x.

Lesen Sie die Dokumentation:

Die Richtung Attribut auf einem @Relationship standardmäßig OUTGOING. Alle Felder oder Methoden, die durch eine INCOMING-Beziehung unterstützt werden, müssen explizit mit einer INCOMING-Anweisung versehen sein.

https://neo4j.com/docs/ogm-manual/current/reference/#reference:annotating-entities:relationship (Ende des Abschnitts).

Ich denke, Sie die Anmerkung auf dem Feld eigentlich nicht brauchen, aber Sie müssen sowohl Setter und Getter. Auch gibt es ein Problem auf neo4-ogm github, das verwandt ist.

+0

Danke für Ihre Antwort. Muss ich diese Annotation auch zu allen möglichen Mutatoren hinzufügen (nicht nur zu Getter/Setter-Methoden) wie zum Beispiel 'addLike (Like like)', 'removeLike (Like like)' und so weiter? – alexanoid

+0

Nein, nur die Getters/Setter. Die Mutatoren werden nicht während der (De-) Serialisierung verwendet. –

Verwandte Themen