使用spring-data-neo4j加载关系

时间:2019-02-20 08:19:48

标签: 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”),也会发生这种情况。

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

1 个答案:

答案 0 :(得分:0)

您需要将Person中的关系类型从List<Movie>更改为List<Role>。 如果使用当前结构加载Person,则Neo4j-OGM(Spring Data Neo4j背后的映射库)不知道哪个是正确的关系,因为您为ACTED_IN定义了Person类型到Movie的位置,不仅通过@Relationship注释建立“正好键入”的关系,而且还以@RelationshipEntity的形式出现。

更改@Relationship也指向@RelationshipEntity将解决此问题。