Java Spring数据Neo4j 4.2查询标签或节点id始终返回null

Java Spring数据Neo4j 4.2查询标签或节点id始终返回null,java,spring,neo4j,spring-data-neo4j,neo4j-ogm,Java,Spring,Neo4j,Spring Data Neo4j,Neo4j Ogm,目前,我正在使用SpringBoot和Neo4j构建一个图形可视化应用程序。但是,当我从实体Neo4jRepository调用一个方法来获取节点属性标签时,它总是返回空值。我的节点实体中是否存在问题 这是我的节点实体 @NodeEntity(label="Personnel") public class PersonnelNode { private Long id; @Labels private Set<String> la

目前,我正在使用SpringBoot和Neo4j构建一个图形可视化应用程序。但是,当我从实体Neo4jRepository调用一个方法来获取节点属性标签时,它总是返回空值。我的节点实体中是否存在问题

这是我的节点实体

@NodeEntity(label="Personnel")
public class PersonnelNode {

    private Long id;
    
    @Labels
    private Set<String> labels;
    
    @GraphId
    private Long personnelId;
    
    private String personnelKey;    
    
    private String personnelNameIN;
    
    private Boolean isTeamLeader;
    
    private Boolean isQA;
    
    private Boolean isSuperUser;
    
    private Short companyGroupId;

    private Boolean isActive;

    private Timestamp created;

    private String createdBy;

    private Timestamp lastModified;

    private String lastModifiedBy; 

    @Relationship(type="PERSONNEL_TASK", direction=Relationship.OUTGOING)
    private TaskNode personnelTasks;
    
    private Long employeeDataId;

    public PersonnelNode() {
    }

    public Long getId() {
        return id;
    }

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

    public Set<String> getLabels() {
        return labels;
    }

    public void setLabels(Set<String> labels) {
        this.labels = labels;
    }

    public Long getPersonnelId() {
        return personnelId;
    }

    public void setPersonnelId(Long personnelId) {
        this.personnelId = personnelId;
    }

    public String getPersonnelKey() {
        return personnelKey;
    }

    public void setPersonnelKey(String personnelKey) {
        this.personnelKey = personnelKey;
    }

    public String getPersonnelNameIN() {
        return personnelNameIN;
    }

    public void setPersonnelNameIN(String personnelNameIN) {
        this.personnelNameIN = personnelNameIN;
    }

    public Boolean getIsTeamLeader() {
        return isTeamLeader;
    }

    public void setIsTeamLeader(Boolean isTeamLeader) {
        this.isTeamLeader = isTeamLeader;
    }

    public Boolean getIsQA() {
        return isQA;
    }

    public void setIsQA(Boolean isQA) {
        this.isQA = isQA;
    }

    public Boolean getIsSuperUser() {
        return isSuperUser;
    }

    public void setIsSuperUser(Boolean isSuperUser) {
        this.isSuperUser = isSuperUser;
    }

    public Short getCompanyGroupId() {
        return companyGroupId;
    }

    public void setCompanyGroupId(Short companyGroupId) {
        this.companyGroupId = companyGroupId;
    }

    public Boolean getIsActive() {
        return isActive;
    }

    public void setIsActive(Boolean isActive) {
        this.isActive = isActive;
    }

    public Timestamp getCreated() {
        return created;
    }

    public void setCreated(Timestamp created) {
        this.created = created;
    }

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public Timestamp getLastModified() {
        return lastModified;
    }

    public void setLastModified(Timestamp lastModified) {
        this.lastModified = lastModified;
    }

    public String getLastModifiedBy() {
        return lastModifiedBy;
    }

    public void setLastModifiedBy(String lastModifiedBy) {
        this.lastModifiedBy = lastModifiedBy;
    }

    public Long getEmployeeDataId() {
        return employeeDataId;
    }

    public void setEmployeeDataId(Long employeeDataId) {
        this.employeeDataId = employeeDataId;
    }

    public TaskNode getPersonnelTasks() {
        return personnelTasks;
    }

    public void setPersonnelTasks(TaskNode personnelTasks) {
        this.personnelTasks = personnelTasks;
    }

}
这是我的Neo4jRepository课程

public interface PersonnelNodeRepository extends Neo4jRepository<PersonnelNode, Long> {

@Query(""
        +"MATCH (p:Personnel)-[r:PERSONNEL_EMPLOYEE]->(e:Employee) "
        + "WHERE e.employeeDataId = {0} RETURN p")
PersonnelNode findByEmployeeDataId(Long employeeDataId);

@Query("MATCH (p:Personnel) WHERE p.personnelId = {0} RETURN p, ID(p), labels(p)")
PersonnelNode findByPersonnelId(Long personnelId);

@Query(""
        + "MATCH p=(n:Personnel)-[r:PERSONNEL_TASK]->(t:Task {isActive: true}) "
        + "<-[pt:PROJECT_TASK]-(j:Project) "
        + "WHERE n.personnelId= {0} "
        + "RETURN nodes(p) as nodes, rels(p) as relationships")
List<Graph<PersonnelNode>> getPersonnelLoadTaskGraphByEmployeeDataId(Long employeeDataId);

@Query("MATCH (p:Personnel) WHERE p.personnelId = {0} RETURN labels(p)")
Object getLabelsByPersonnelId(Long personnelId);
当我将return变量与服务中的节点实体(也在存储库中)一起设置时,结果是相同的,它总是返回null值

PersonnelNode nodePersonnel = personnelNodeDao.getByPersonnelId(Long.valueOf("2"));
事实上,我的问题是,就这个实体而言。对于其他实体,我可以获得节点id和标签。这是人员实体的数据返回。


仅供参考,我使用的是Spring数据Neo4j 4.2、Spring boot 1.5.2和ogm 2.1。之前谢谢。

当您直接从数据库执行时,此查询是否返回结果?您需要使用@QueryResult注释并创建一个类,该类将是您期望从repo层得到的结果,它确实是Lucia,这是当我直接从DB执行时查询返回的结果。但是,我在另一个节点实体中尝试了相同的方法来获取标签或id,我得到了预期的结果,没有使用@QueryResult annotation进行注释。对不起,我的错误。我试图将对象变量设置为“工作”,我得到了节点标签。但当我希望返回@NodeEntity时,我无法获取节点id和节点标签。但是对于其他NodeEntity类,它工作得很好,我可以得到标签和节点id。我不明白您的期望是什么。是的,因为您只返回字符串集工作的标签。你期望返回@NodeEntity是什么意思?请参见return语句,您只返回节点的标签。返回标签(p)实际上,我的期望是,当我调用PersonnelNodeFindBypersonnelId(Long personnelId)方法时,在我的Neo4jRepository中,我得到了节点id和节点标签以及实体属性。但是我不知道为什么它不适用于这个实体,但是对于其他实体,我可以得到节点id和标签。
Object nodePersonnel = personnelNodeDao.getLabelsByPersonnelId(Long.valueOf("2"));
PersonnelNode nodePersonnel = personnelNodeDao.getByPersonnelId(Long.valueOf("2"));