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.作者投稿可能会经我们编辑修改或补充。



