我将 spring 数据与 neo4j 一起使用。
I used @Query
注解将查询放置在存储库中,查询如下
@Query(value = "START me=node({0}), friend=node({1}) "
+ "MATCH p=shortestPath(me-[:ACTIVEFRIEND*..]->friend)"
+ " RETURN p")
public Iterable<EntityPath<User, User>> getShortestPathBetween(User a, User b);
在控制器中我将其访问为
Iterable<EntityPath<User, User>> shortestPathBetween = this.queryService.getShortestPathBetween(user, friend);
for (EntityPath<User, User> path : shortestPathBetween) {
Iterator<User> iter = path.<User>nodeEntities().iterator();
}
当它尝试访问时path.nodeEntities
,它导致了这个错误:
嵌套异常是 java.lang.NullPointerException] 其根本原因
java.lang.NullPointerException
在 org.springframework.data.neo4j.support.path.ConvertingEntityPath.nodes(ConvertingEntityPath.java:137)
在 org.springframework.data.neo4j.support.path.ConvertingEntityPath.nodeEntities(ConvertingEntityPath.java:69)
在 com.laindain.cms.controller.QueryController.getShortestPathBetween(QueryController.java:194)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:601)
在 org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212)
在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
在 org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
在 java.lang.Thread.run(Thread.java:722)
如果有人能在这方面帮助我,我将不胜感激。
谢谢
赫曼特
尝试这样定义方法:
public EndResult<EntityPath<User, User>> getShortestPathBetween(User a, User b);
因为查询返回的是路径而不是路径的集合。
您可以得到如下结果:
EntityPath<User, User> shortestPathBetween =
this.queryService.getShortestPathBetween(user, friend).to(EntityPath);
然后可以使用以下命令访问路径上的节点和关系节点实体()和关系实体()返回的方法实体路径.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)