spring - Spring Data neo4j 双方访问关系
问题描述
在我的 neo4j 数据库中,我有这个
(:Song)-[:APPEARS_ON {song_nr: x}]->(:Release)
从我的 Spring Boot 应用程序中,我想从歌曲端以及发布端访问这种关系,同时访问歌曲编号。
歌曲.java
@Node
public class Song {
@Id @GeneratedValue
private Long id;
private String name;
private OffsetTime length;
@Relationship(type="APPEARS_ON", direction = Relationship.Direction.OUTGOING)
private final List<AppearsOn> releases;
private Song(String name, OffsetTime length, List<AppearsOn> releases) {
this.name = name;
this.length = length;
this.releases = releases;
}
public Long getId() { return id; }
public String getName() { return name; }
public OffsetTime getLength() { return length; }
public List<AppearsOn> getReleases() { return releases; }
}
AppearsOn.java
@RelationshipProperties
public class AppearsOn {
@Id @GeneratedValue
private Long id;
@Property("song_nr")
private Integer songNr;
@TargetNode
private Release release;
public Long getId() {
return id;
}
public Integer getSongNr() { return songNr; }
public Release getRelease() { return release; }
}
发布.java
@Node
public class Release {
@Id @GeneratedValue
private Long Id;
private String name;
private Integer year;
@Relationship(type = "APPEARS_ON", direction = Relationship.Direction.INCOMING)
private final List<AppearsOnReverse> songs;
public Release(String name, Integer year, List<AppearsOnReverse> songs) {
this.name = name;
this.year = year;
this.songs = songs;
}
public Long getId() {
return Id;
}
public String getName() {
return name;
}
public Integer getYear() {
return year;
}
public List<AppearsOnReverse> getSongs() { return songs; }
}
AppearsOnReverse.java
@RelationshipProperties
public class AppearsOnReverse {
@Id @GeneratedValue
private Long id;
@Property("song_nr")
private Integer songNr;
@TargetNode
private Song song;
public Long getId() {
return id;
}
public Integer getSongNr() {
return songNr;
}
public Song getSong() {
return song;
}
}
当我尝试查询某些内容时,例如List<Release> allReleases = releaseRepository.findAll();
我得到一个这样的例外:
org.neo4j.driver.exceptions.DatabaseException: Expected
RegularSinglePlannerQuery(QueryGraph {Nodes: [' rootNodeIds@7'], .......
Instead, got:
RegularSinglePlannerQuery(QueryGraph {Nodes: [' rootNodeIds@7'], .......
是否有可能从双方访问关系,或者这会破坏 SDN?
org.neo4j.driver v4.2.7
spring-boot-starter-data-neo4j v2.5.6
spring-data-neo4j v6.1.6
解决方案
您的映射/模型没有问题 问题出在您使用的 Neo4j 版本中。它有一个查询计划程序错误。我不知道它何时出现,但它已通过 4.3.3 / 4.2.10 及更高版本解决。
这与 SDN 6.1.6 中一些必要的查询改进相结合,导致了现在有问题的星座。如果您无法升级数据库,我建议手动将 Spring Data Neo4j 版本设置为 6.1.5 。
推荐阅读
- php - 是否可以在 foreach 循环中回显另一个 foreach 数组值?
- javascript - 等待多个文件的文件内容
- linux - 我无法下载 objconv,这是 PATH 问题吗?
- kotlin - 动态扩展循环顶部边框
- msbuild - 错误 MSB3326:无法导入以下密钥文件 XXXXXXSigningKey.snk
- gpu - MPI+OpenACC:#pragma acc host_data use_device() 如何工作?
- python - OOP 项目 - 初学者 - 寻找反馈
- c# - 在 C# 中转换 varchar 值时转换失败
- html - CSS / HTML按钮:悬停问题?
- javascript - Vue JS-无法使用来自 Vuex 的数据更新 html 表