我附加在两个简单的节点下面,这些节点通过关系连接。为简洁起见,我省略了构造函数和getter以及setter。
@NodeEntity
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
@Relationship(type = "ACTED_IN")
private List<Movie> movies = new ArrayList<>();
}
@NodeEntity
public class Movie {
@Id
@GeneratedValue
private Long id;
private String title;
@JsonIgnoreProperties("movie")
@Relationship(type = "ACTED_IN", direction = Relationship.INCOMING)
private List<Role> roles;
}
@RelationshipEntity(type = "ACTED_IN")
public class Role {
@Id
@GeneratedValue
private Long id;
@StartNode
private Person person;
@EndNode
private Movie movie;
}
我的问题如下。如果通过使用存储库界面加载某个人,我会看到电影列表中的人物始终为空。即使该人与电影有关系(“ACTED_IN”),也会发生这种情况。
如果我同时加载电影,我会看到角色列表已正确填充。这是预期的行为吗?它对我来说有点奇怪吗?有人可以给出更好的解释。
您需要将Person
中您的关系类型从List<Movie>
更改为List<Role>
。如果使用当前构造加载Person
,Neo4j-OGM(Spring Data Neo4j背后的映射库)不知道哪个是正确的关系,因为您将ACTED_IN
的Person
类型定义为Movie
s,不仅仅是因为“只是键入”关系, @Relationship
注释,但也作为@RelationshipEntity
。
改变@Relationship
也指向@RelationshipEntity
将解决问题。