1

我是 Neo4j 的初学者,我对 Neo4j 图模型有基本的了解。我想知道如何使用 java 和 cyper 查询来获取两个节点之间的关系。我有两个实体,例如关注用户和角色。我想检索用户的角色。我有运行良好的 cyper 查询。当我尝试通过 neo4j 实体类时,我遗漏了一些东西。请看下面的代码片段,

用户实体类:

public class Users extends Entity{

    /*private Long userId;*/
    private String name;
    private String email;
    private String login;
    private String password;

    @Relationship(type = "HAS_ROLE")
    Set<Roles> roles=new HashSet<Roles>();

    public Users(){
        roles = new HashSet<Roles>();
    }

    public Users(Users user) {
        super();
        this.name = user.getName();
        this.login = user.getLogin();
        this.password = user.getPassword();
        this.roles = user.getRoles();
    }

    public Set<Roles> getRoles() {
        return roles;
    }

    public void setRoles(Set<Roles> roles) {
        this.roles = roles;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

角色实体类:

public class Roles extends Entity implements GrantedAuthority{

    private static final long serialVersionUID = 1L;

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String getAuthority() {
        return name;
    }
}



 public interface UserRepository extends GraphRepository<Users> {

     @Query("MATCH (user:Users)-[r]->(role:Roles) WHERE user.login = {0} RETURN user, role");  
     Users findByLogin(String login);

   }

任何人都可以帮我了解获取针对用户的角色吗?

TIA..,

4

2 回答 2

2

派生查找器的工作深度为 1,因此您可以这样做

 public interface UserRepository extends GraphRepository<Users> {
   Users findByLogin(String login);
 }

如果要使用 a @Query,请返回路径(并根据需要调整深度)。这个例子和上面一样——depth=1

public interface UserRepository extends GraphRepository<Users> {
   @Query("MATCH p=(user:Users)-[r*0..1]->() WHERE user.login = {0} RETURN p") 
   Users findByLogin(String login);
 }
于 2015-09-01T13:25:07.290 回答
2

重要的是要知道,要使用 cypher 和 java 获取节点,必须在 RETURN 子句中包含第一个节点和空值节点之间的关系:

@Query("MATCH (u:User)<-[rel:RELATIONSHIP]-(r:Roles) " +
            " RETURN u,r,rel")
    Users findByLogin(String login);

否则,Reference 中的 Stay 属性将为空值。

于 2016-05-10T21:48:41.143 回答