scala之在嵌入式数据库中使用 Scala 中的 Cypher 失败

kerrycode 阅读:61 2024-09-07 23:24:14 评论:0

我使用来自 Scala 2.11.1 的 neo4j-jdbc 2.0.2 和 Neo4J 数据库 2.0.3。虽然通过 rest 接口(interface)向 Neo4J 服务器发送 Cypher 查询效果很好,但在嵌入式数据库中使用 Cypher 查询会失败。在对 Neo4J 资源进行了一些研究之后,我发现原因在 Cypher API 内部,同时在 ExecutionEngine 内部调用执行。我该怎么做才能修复它?

def main(args: Array[String]) { 
  val db = new GraphDatabaseFactory().newEmbeddedDatabase("D:/Datenbanken/neo4j/testsnn") 
  val engine = new ExecutionEngine(db) 
  val result = engine.execute("MATCH (n) return n") 
  println(result) 
} 

这段代码的执行在运行时产生

Exception in thread "main" java.lang.NoClassDefFoundError: scala/runtime/AbstractPartialFunction$mcVL$sp 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:367) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at org.neo4j.cypher.internal.compiler.v2_0.executionplan.verifiers.HintVerifier$.<init>(HintVerifier.scala:31) 
at org.neo4j.cypher.internal.compiler.v2_0.executionplan.verifiers.HintVerifier$.<clinit>(HintVerifier.scala) 
at org.neo4j.cypher.internal.compiler.v2_0.CypherCompiler.<init>(CypherCompiler.scala:33) 
at org.neo4j.cypher.internal.CypherCompiler$VersionProxy.<init>(CypherCompiler.scala:47) 
at org.neo4j.cypher.internal.CypherCompiler$.apply(CypherCompiler.scala:37) 
at org.neo4j.cypher.ExecutionEngine$$anonfun$org$neo4j$cypher$ExecutionEngine$$createCompiler$2.apply(ExecutionEngine.scala:131) 
at org.neo4j.cypher.ExecutionEngine$$anonfun$org$neo4j$cypher$ExecutionEngine$$createCompiler$2.apply(ExecutionEngine.scala:129) 
at scala.PartialFunction$AndThen.applyOrElse(PartialFunction.scala:185) 
at org.neo4j.cypher.ExecutionEngine.org$neo4j$cypher$ExecutionEngine$$createCompiler(ExecutionEngine.scala:133) 
at org.neo4j.cypher.ExecutionEngine$$anonfun$2.apply(ExecutionEngine.scala:78) 
at org.neo4j.cypher.ExecutionEngine$$anonfun$2.apply(ExecutionEngine.scala:78) 
at org.neo4j.cypher.ExecutionEngine$$anon$1.apply(ExecutionEngine.scala:119) 
at org.neo4j.cypher.ExecutionEngine$$anon$1.apply(ExecutionEngine.scala:118) 
at org.neo4j.kernel.impl.api.KernelSchemaStateStore.getOrCreate(KernelSchemaStateStore.java:72) 
at org.neo4j.kernel.impl.api.SchemaStateConcern.schemaStateGetOrCreate(SchemaStateConcern.java:37) 
at org.neo4j.kernel.impl.api.LockingStatementOperations.schemaStateGetOrCreate(LockingStatementOperations.java:124) 
at org.neo4j.kernel.impl.api.OperationsFacade.schemaStateGetOrCreate(OperationsFacade.java:412) 
at org.neo4j.cypher.ExecutionEngine.getOrCreateFromSchemaState(ExecutionEngine.scala:121) 
at org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:77) 
at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:59) 
at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:54) 
at org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:65) 
at de.richertt.scalaneonodes.example.Main2$.main(Main2.scala:17) 
at de.richertt.scalaneonodes.example.Main2.main(Main2.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)s 

请您参考如下方法:

恢复 Mikesname 和 Michael Hunger 的有用评论我可以自己回答这个问题:如果我想将 Scala 的 Neo4j 数据库的嵌入式版本与 Cypher 查询一起使用,我必须使用与 Cypher 查询相同的 Scala 版本对于 Cypher 实现(当前为 Scala 2.10),因为它在同一个 JRE 中运行。


标签:数据库
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号