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

如何使用springdata Neo4j和GraphRespository从两个节点之间的关系集合中获取关系,neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Spring Data Neo4j 4,Neo4j Ogm,我有两个实体,如用户和帐户。与帐户节点相关的用户节点 20种关系中的任何一种。请在附件中找到样品图片设计 我需要使用20个关系中的任意一个来搜索相应用户的帐户。我使用密码查询来检索用户详细信息和帐户。。两个实体之间的关系将是20种关系中的任意一种。因此,我无法注释@RelationshipEntity类型值。例如,请查找代码 User.java public class User { private Long id; String fulltextsearch;

我有两个实体,如用户和帐户。与帐户节点相关的用户节点 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;
     .....
         ...    
}
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);
}
@RepositoryRestResource(collectionResourceRel=“User”,path=“User”)
公共接口Userrepository扩展了GraphRespository{
用户findByLogin(@Param(“login”)字符串login);
@查询(“匹配p=(用户:用户)-[r*0..1]->(帐户)WHERE user.login=~('(?i)。*'+{login}+'.')返回p”)
集合findByloginContaining(@Param(“login”)字符串login);
}
我尝试为每个关系创建对象(即20个关系对象)。我不确定这是否是获得值的正确方法。 有人能帮我了解一下如何从账户中提取关系吗?它总是返回为null


提前感谢。

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

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

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


注意:只有OGM 2.x/SDN 4.1支持将自定义查询结果映射到实体。您不能返回路径,只能返回组成路径的实体,如节点和rel。

感谢您宝贵的回复。我将更新我的项目以支持OGM 2.x/SDN 4.1。由于我仍处于学习阶段,请您推荐任何带有示例代码的链接作为开始。参考手册是一个很好的开始-。然后在上有一个示例项目,在上有一篇博客文章(由两部分组成)
@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);
}