2013-05-02 61 views
0

尝试运行简单密码查询时出现奇怪的异常。首先我会介绍我的代码,然后我会显示导致异常的原因。所以,我有以下类别:Spring Data Neo4j - 运行密码查询时发生异常

一个简单的类来表示用户配置文件:

public abstract class Profile extends AbstractEntity { 

    @Indexed 
    ProfileType profileType; 

    @Indexed(indexType = IndexType.FULLTEXT, indexName = "name") 
    String firstName; 

    @Indexed(indexType = IndexType.FULLTEXT, indexName = "name") 
    String lastName; 

    @Indexed 
    EyeColor eyeColor; 

    @Indexed  
    HairColor hairColor; 

    @Indexed 
    Nationality nationality; 

    @Indexed 
    int height; 

    public Profile() { 
     setProfileType(); 
    } 

    public Profile(String firstName, String lastName, Nationality nationality, EyeColor eyeColor, HairColor hairColor, int height) { 
     this(); 
     this.setFirstName(firstName); 
     this.setLastName(lastName); 
     this.setNationality(nationality); 
     this.setHairColor(hairColor); 
     this.setEyeColor(eyeColor); 
     this.setHeight(height); 
    } 

    /* Getters and Setters */ 
} 

和一个简单的类,它Profile继承,代表平民:

@NodeEntity 
public class Civilian extends Profile { 

    @GraphProperty(propertyType = Long.class) 
    DateTime dateOfBirth; 

    @Indexed 
    boolean missing; 

    @RelatedTo 
    @Fetch 
    Set<Casualty> casualties = new HashSet<Casualty>(); //TODO: design 

    public Civilian() { 
     this.profileType = ProfileType.CIVILIAN; 
    } 

    public Civilian(String firstName, String lastName, Nationality nationality, EyeColor eyeColor, HairColor hairColor, int height, DateTime dateOfBirth, boolean missing) { 
     super(firstName, lastName, nationality, eyeColor, hairColor, height); 
     this.setDateOfBirth(dateOfBirth); 
     this.setMissing(missing); 
    } 

    /* Getters and Setters */ 
} 

所以我为Civilian类创建了以下存储库:

public interface CivilianRepository extends GraphRepository<Civilian> { 
    @Query("start n=node(*) where n.firstName=~{0} return n") 
    Page<Civilian> findCiviliansProperties(String firstName, Pageable page);  
} 

好的。所以我创建了几个Civilian节点,并用它们填充图表。除了Civilian节点之外,图中没有其他节点。当我运行findCiviliansProperties方法,我得到以下异常:

Exception in thread "main" org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement start n=node(*) where n.firstName=~{0} return n skip 0 limit 10; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement start n=node(*) where n.firstName=~{0} return n skip 0 limit 10; nested exception is org.neo4j.cypher.EntityNotFoundException: The property 'firstName' does not exist on Node[0] 
    at org.springframework.data.neo4j.support.query.CypherQueryEngine.query(CypherQueryEngine.java:52) 
    at org.springframework.data.neo4j.repository.query.GraphRepositoryQuery.dispatchQuery(GraphRepositoryQuery.java:98) 
    at org.springframework.data.neo4j.repository.query.GraphRepositoryQuery.execute(GraphRepositoryQuery.java:81) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:312) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy33.findCiviliansProperties(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198) 
    at com.sun.proxy.$Proxy36.findCiviliansProperties(Unknown Source) 
    at org.technion.socialrescue.playground.Playground.main(Playground.java:38) 
Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement start n=node(*) where n.firstName=~{0} return n skip 0 limit 10; nested exception is org.neo4j.cypher.EntityNotFoundException: The property 'firstName' does not exist on Node[0] 
    at org.springframework.data.neo4j.support.query.CypherQueryEngine.parseAndExecuteQuery(CypherQueryEngine.java:63) 
    at org.springframework.data.neo4j.support.query.CypherQueryEngine.query(CypherQueryEngine.java:49) 
    ... 20 more 
Caused by: org.neo4j.cypher.EntityNotFoundException: The property 'firstName' does not exist on Node[0] 
    at org.neo4j.cypher.internal.commands.expressions.Property.apply(Property.scala:35) 
    at org.neo4j.cypher.internal.commands.expressions.Property.apply(Property.scala:29) 
    at org.neo4j.cypher.internal.commands.RegularExpression.isMatch(Predicate.scala:259) 
    at org.neo4j.cypher.internal.pipes.FilterPipe$$anonfun$createResults$1.apply(FilterPipe.scala:29) 
    at org.neo4j.cypher.internal.pipes.FilterPipe$$anonfun$createResults$1.apply(FilterPipe.scala:29) 
    at scala.collection.Iterator$$anon$22.hasNext(Iterator.scala:390) 
    at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:334) 
    at scala.collection.Iterator$class.isEmpty(Iterator.scala:272) 
    at scala.collection.Iterator$$anon$19.isEmpty(Iterator.scala:333) 
    at org.neo4j.cypher.internal.pipes.SlicePipe.createResults(SlicePipe.scala:32) 
    at org.neo4j.cypher.internal.pipes.ColumnFilterPipe.createResults(ColumnFilterPipe.scala:37) 
    at org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$6.apply(ExecutionPlanImpl.scala:127) 
    at org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$6.apply(ExecutionPlanImpl.scala:125) 
    at org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.execute(ExecutionPlanImpl.scala:33) 
    at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:59) 
    at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:63) 
    at org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79) 
    at org.springframework.data.neo4j.support.query.CypherQueryEngine.parseAndExecuteQuery(CypherQueryEngine.java:61) 
    ... 21 more 
Caused by: org.neo4j.graphdb.NotFoundException: 'firstName' property not found for NodeImpl#0. 
    at org.neo4j.kernel.impl.core.Primitive.newPropertyNotFoundException(Primitive.java:184) 
    at org.neo4j.kernel.impl.core.Primitive.getProperty(Primitive.java:179) 
    at org.neo4j.kernel.impl.core.NodeImpl.getProperty(NodeImpl.java:52) 
    at org.neo4j.kernel.impl.core.NodeProxy.getProperty(NodeProxy.java:155) 
    at org.neo4j.cypher.internal.commands.expressions.Property.apply(Property.scala:33) 
    ... 38 more 

因此有关此异常的最重要的事情是以下行 - The property 'firstName' does not exist on Node[0] ..但它怎么可能呢?图中只有Civilian个节点,它们都具有firstName属性。难道neo4j框架会在我的图表中添加更多的隐藏节点吗?因为当我改变我的查询到这一点:

start n=node(*) where has(n.firstName) AND n.firstName=~{0} return n 

一切正常......

有什么不对?

谢谢!

回答

1

neo4j当您创建一个新实例时,自动带有1个节点,并且这是参考节点。你应该删除它。

graphDatabaseService.getNodeById(0).delete() 
+0

但是他们为什么创建这个节点? – gipouf 2013-05-03 07:41:28

+1

@royv查看该答案(http://lists.neo4j.org/pipermail/user/2011-February/006935.html)。 – tstorms 2013-05-03 09:26:14

+0

谢谢!现在它是有道理的。但我希望用户可以添加此节点,而不是系统将其添加为默认行为。有没有从一开始就创建没有这个节点的图形的方法?它添加这条线有点难看。 – gipouf 2013-05-03 10:00:05

相关问题