我有两个实体,如用户和帐户。与帐户节点相关的用户节点 与20个关系中的任何一个。请找到附带的样本图像设计
我需要使用20个关系中的任何一个来搜索相应用户的帐户。我使用cypher查询来检索用户详细信息和帐户。两个实体之间的关系将是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返回。
提前致谢。
答案 0 :(得分:1)
OGM / SDN 4不支持未知关系类型。 的关系类型必须在@RelationshipEntity上指定。
执行此操作的一种方法是按照您的说法为每种类型创建一个@RelationshipEntity,但这也意味着您必须在User类中指定20个这样的关系,因为关系类型不同(即使开始/结束节点是相同)。这可能不太理想,也很难管理。
如果您的应用程序主要用于动态关系类型,那么OGM可能不太合适。
注意:仅在OGM 2.x / SDN 4.1中支持将自定义查询结果映射到实体。您不能返回路径,只能返回构成路径的实体,例如nodes和rels。