使用 spring-data-neo4j 加载关系
Loading relationships using spring-data-neo4j
我在下面附加了两个通过关系连接的简单节点。为了简洁起见,我省略了构造函数、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
类型=10=] 到 Movie
s 不仅用于 @Relationship
注释的 "just typed" 关系,而且还作为 @RelationshipEntity
.
将 @Relationship
更改为也指向 @RelationshipEntity
将解决问题。
我在下面附加了两个通过关系连接的简单节点。为了简洁起见,我省略了构造函数、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
类型=10=] 到 Movie
s 不仅用于 @Relationship
注释的 "just typed" 关系,而且还作为 @RelationshipEntity
.
将 @Relationship
更改为也指向 @RelationshipEntity
将解决问题。