2015-02-23 61 views
0

我有关于在Java Spring中获取某些特定列的问题。
我正在使用Java Spring Boot和GraphDB作为我的数据库,并使用Model和Repository访问数据库(例如:我有userRepository,并使用userRepository.FindAll,并且所有记录都在其所有字段中加载)。
举例来说,我有一个列/字段的表:如何使用Neo4j从存储库获取特定列

@NodeEntity 
public class User { 
    @GraphId 
    Long id; 

    @NotNull 
    @Indexed(unique=true) 
    private String username; 

    @NotNull 
    private String password; 

    @NotNull 
    private String firstName; 

    @NotNull 
    private String lastName; 

    @NotNull 
    private String role; 

    @NotNull 
    private Boolean active; 

    public User() { 

    } 

    public User(String username, String password, String firstName, 
      String lastName, String role, Boolean active) { 
     super(); 
     this.username = username; 
     this.password = password; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.role = role; 
     this.active = active; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

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

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getRole() { 
     return role; 
    } 

    public void setRole(String role) { 
     this.role = role; 
    } 

    public Boolean getActive() { 
     return active; 
    } 

    public void setActive(Boolean active) { 
     this.active = active; 
    } 
} 

随着存储库这样的:

public interface UserRepository extends GraphRepository<User> { 

} 

我没有把UserRepository.FindAll,因为它已经实现了它GraphRepository

我不需要加载“密码”字段。我应该如何在不加载“密码”字段的情况下加载记录?

回答

1

使用一类具有@QueryResult

注释在UserRepository接口:

@Query("MATCH (u:USER) RETURN u.username as username, u.role as role") 
List<UserSimple> findAllSimple(); 

http://docs.spring.io/spring-data/data-neo4j/docs/current/reference/html/#reference_programming-model_mapresult

编辑:(答案在评论问题)

用@QueryResult注释的这些类可以很容易地成为内部类,它真的取决于您。

要返回图形ID,请在return子句中使用ID(u) as id

+0

你说我需要用@QueryResult创建类。据我所知,1类= 1文件类。如果我需要很多这样的查询,我是否必须创建许多文件? – 2015-02-24 03:59:00

+0

我可以通过ID吗? @Query(“MATCH(u:USER)RETURN u.id as id,u.username as username,u.role as role”) 我无法获取ID – 2015-02-24 07:27:22

+0

我已经编辑了我的答案和其他信息。 – 2015-02-24 08:30:26