我有一个图,其中包括:
(用户)-[: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
关系。然后,必须在自定义查询中还命名并返回关系。