2013-05-02 65 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

相關問題