2017-03-18 18 views
0

私は、次の基本エンティティがあります。私はこのクラスにlikesゲッター/セッターを追加するときに、現在のクラスのすべてが正常に動作しますが、と春データのNeo4j 4、OGMと@Relationship注釈

@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; 
    } 

} 

を:

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

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

私のテストは、アサーションエラー(例外なし)で失敗します。たとえば、クエリの削除後です。

しかし、ゲッター/セッターの上に

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

を追加した後、すべてが再び正常に動作を開始:

@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; 
    } 
... 

} 

は、それが正しく注釈付きNodeEntityクラスですか?私には、この種の宣言は少し冗長に見えます。この場合、正しい宣言は何ですか?

答えて

4

はい、これは今すぐ実装する正しい方法です - neo4j-ogmバージョン2.1.x以降。

OUTGOINGに@Relationshipのデフォルトの方向属性:

は、マニュアルを参照してください。 INCOMING関係でサポートされているフィールドやメソッドには、INCOMING方向で明示的に注釈を付ける必要があります。

https://neo4j.com/docs/ogm-manual/current/reference/#reference:annotating-entities:relationship(セクションの最後)。

私はあなたが実際にフィールド上の注釈を必要としませんが、セッターとゲッターの両方が必要だと思います。関連するneo4-ogm githubにも問題があります。

+0

あなたの答えをありがとう。 'addLike(Like like)'、 'removeLike(Like like)'のような、すべての可能なミューテータ(getter/setterメソッドだけでなく)にもこのアノテーションを追加する必要がありますか? – alexanoid

+0

いいえ、ゲッター/セッターだけです。ミューテータは、直列化中には使用されません。 –

関連する問題