Spring 数据 Neo4j 4、OGM 和@Relationship 注解

Spring Data Neo4j 4, OGM and @Relationship annotation

我有以下基本实体:

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

}

当前 class 一切正常,但是当我将 likes getter/setter 添加到此 class:

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

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

我的测试因断言错误而失败(没有例外).. 例如在删除查询之后。

但添加后

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

在 getter/setter 之后一切又开始正常工作了:

@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 class ?对我来说,这种声明看起来有点多余。您能否告知在这种情况下什么是正确的声明?

是的,这是现在实现它的正确方法 - 从 neo4j-ogm 版本 2 开始。1.x。

查看文档:

The direction attribute on a @Relationship defaults to OUTGOING. Any fields or methods backed by an INCOMING relationship must be explicitly annotated with an INCOMING direction.

https://neo4j.com/docs/ogm-manual/current/reference/#reference:annotating-entities:relationship(本节结束)。

我认为你实际上不需要字段上的注释,但你需要setter和getter。 neo4-ogm github 上也有一个相关的问题。