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
一切正常......
有什么不对?
谢谢!
但是他们为什么创建这个节点? – gipouf 2013-05-03 07:41:28
@royv查看该答案(http://lists.neo4j.org/pipermail/user/2011-February/006935.html)。 – tstorms 2013-05-03 09:26:14
谢谢!现在它是有道理的。但我希望用户可以添加此节点,而不是系统将其添加为默认行为。有没有从一开始就创建没有这个节点的图形的方法?它添加这条线有点难看。 – gipouf 2013-05-03 10:00:05