如何使用带有GraphRepository的springdata Neo4j从两个节点之间的关系集合中获取关系

how to get the relationship from Collection of relationships between two nodes using springdata Neo4j with GraphRepository

我有两个实体,例如用户和帐户。与Account节点相关的User节点 与 20 种关系中的任何一种。请查找附件中的示例图像设计

我需要使用 20 种关系中的任何一种来搜索相应用户的帐户。我使用密码查询来检索用户详细信息和帐户。两个实体之间的关系将是 20 种关系中的任何一种。所以我无法注释 @RelationshipEntity 类型值。请找到代码例如 User.java

public class User
{ 
    private Long id;    
    String fulltextsearch;   

    String user_id; 

    String status; 

     @Relationship(type = "perm")
     List<Acronym> acronym;
     .....
         ...    
}

Acronym.java

@JsonIdentityInfo(generator=JSOGGenerator.class)
@RelationshipEntity
public class Acronym {
@GraphId
    Long id;
    String acronym;
    @StartNode
    private User user;
    @EndNode
    private Account account;
....
....
}

Userrepository.java

@RepositoryRestResource(collectionResourceRel = "User", path = "User")
public interface Userrepository extends GraphRepository<User> { 
    User findByLogin(@Param("login") String login);

    @Query("MATCH p=(user:User)-[r*0..1]->(account) WHERE user.login =~('(?i).*'+{Login}+'.*') RETURN p")
    Collection<User> findByloginContaining(@Param("login") String login);
}

我尝试为每个关系创建对象(即 20 个关系对象)。我不确定这种获取价值的方法是否正确。 任何人都可以帮助我知道如何获取该帐户的关系吗?它总是检索为 null。

提前致谢。

OGM/SDN4 不支持未知关系类型。关系类型 必须 在 @RelationshipEntity 上指定。

如您所说,一种方法是为每个类型创建一个@RelationshipEntity,但这也意味着您必须在用户 class 中指定 20 个这样的关系,因为关系类型不同(即使start/end 节点相同)。这可能并不理想,而且难以管理。

如果您的应用程序主要使用动态关系类型,则 OGM 可能不太适合。

注意:仅 OGM 2.x / SDN 4.1 支持将自定义查询结果映射到实体。您不能 return 路径,只能是构成路径的实体,例如节点和 rels。