我有一个图,其中包括:

(用户)-[:MEMBER_OF]->(组)

(用户)-[:MEMBER_OF]->(经理)-[:MANAGES]->(组)

在应用程序中,我有一个类:

@NodeEntity
public class UserEntity {
  @Property
  private Long id;

  @Relationship(type = "MEMBER_OF", direction = Relationship.OUTGOING)
  private List<GroupEntity> memberInGroups;

  private List<GroupEntity> managesGroups;
}


在存储库中,我有一种获取用户的方法,如下所示:

@Query("match (u:User{id:{id}) " +
        "optional match (u)-[:MEMBER_OF]->(g:Group) " +
        "optional match (u)-[:MEMBER_OF]->(s:Managers)-[:MANAGES]->(m:Group) " +
        "return u,collect(g) as memberInGroups,collect(m) as managesGroups")
Optional<UserEntity> findById(Long id);


问题是此查询在浏览器中正确返回了结果,这意味着我对memberInGroups和managesGroups具有一些值(非null)。

但是,当我通过应用程序进行调用时,我按预期填写了memberInGroups,但managesGroups为null。

我认为这是一个映射问题,因为managesGroups没有“关系”注释或“属性”注释。

有没有一种方法可以使managesGroups值正确显示在UserEntity对象中?

最佳答案

您只能将一个类中的相同关系类型映射到不同的目标类型/类(docs)。当然,您仍然需要其他关系定义上的注释。

在您的具体情况下,还有另一个问题:您不能“跳过”图中的关系/节点,而只能将其映射到实体。
解决此问题的一种方法是对Managers进行建模,并在此类内建立Group关系。然后,必须在自定义查询中还命名并返回关系。

09-27 11:48