0

我在下面附加了两个通过关系连接的简单节点。为简洁起见,我省略了构造函数、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”),也会发生这种情况。

如果我同时加载电影,我会看到角色列表已正确填充。这是预期的行为吗? 我觉得有点奇怪?有人可以给出更好的解释。

4

1 回答 1

0

您需要将您的关系类型Person从更改List<Movie>List<Role>。如果您Person使用当前构造加载,Neo4j-OGM(Spring Data Neo4j 背后的映射库)不知道哪个是正确的关系,因为您为to s 定义了ACTED_IN类型,不仅用于注释的“刚刚键入”的关系,也作为一个。PersonMovie@Relationship@RelationshipEntity

改变@Relationshipto也指向the@RelationshipEntity将解决问题。

于 2019-02-21T07:37:34.077 回答