Java Spring数据Neo4j 4.2查询标签或节点id始终返回null
目前,我正在使用SpringBoot和Neo4j构建一个图形可视化应用程序。但是,当我从实体Neo4jRepository调用一个方法来获取节点属性标签时,它总是返回空值。我的节点实体中是否存在问题 这是我的节点实体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
@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"));