繁体   English   中英

获取孩子时的 Spring-data-neo4j NullPointerException

[英]Spring-data-neo4j NullPointerException when get children

我目前正在研究 spring-data-neo4j,需要获取某些节点的子节点。

这是域

@NodeEntity
public class GLNode {

    @GraphId
    private Long id;

    @Property(name="description")
    private ArrayList<String> desc;

    public ArrayList<String> getDesc() {
        return this.desc;
    }

    @Relationship(type = "GLRelationship")
    private Collection<GLNode> children;

    public Collection<GLNode> getChildren(){
        return this.children;
    }

}

这是存储库

@Query("MATCH (n:GLNode) WHERE id(n)={0} RETURN n")
GLNode getGLNodeFromId(Integer idOfNode);

在服务中,我成功获取了节点,但在尝试访问其子节点时获取空指针,例如:

    GLNode m = repo.getGLNodeFromId(0);
    System.out.println(m.getChildren().iterator().next().getDesc().toString());

这是例外:

java.lang.NullPointerException
    com.hersbitcloud.cancercloud.services.GLService.getGLNodes(GLService.java:40)
    com.hersbitcloud.cancercloud.controllers.GLController.getGLNodes(GLController.java:36)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:497)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    com.hersbitcloud.cancercloud.CORSFilter.doFilter(CORSFilter.java:24)
    org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

我确定m已成功检索。 我在这里做错了什么?

谢谢你。

getChildren()将为您的自定义查询为空

@Query("MATCH (n:GLNode) WHERE id(n)={0} RETURN n")
GLNode getGLNodeFromId(Integer idOfNode);

因为查询只返回节点,没有关系(深度 0)。

如果您通过 ID 检索节点,那么repository.findOne(id)neo4jOperations.load(GLNode.class,id)会更合适。 这些方法将实体加载到默认深度 1,这意味着相关实体相距一跳。

您可以使用repository.findOne(id,depth)neo4jOperations.load(GLNode.class,id,depth)更改此默认深度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM