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 上也有一个相关的问题。
我有以下基本实体:
@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 上也有一个相关的问题。