从Spring运行Cypher查询到Neo4j

时间:2016-07-15 18:42:50

标签: java neo4j cypher spring-data-neo4j

我上传了一个CSV文件,并且已经在Neo4j上定义了节点和关系。我试图基于一个示例创建一个程序,该示例基本上从Spring运行一个cypher查询,该查询将生成neo4j的输出。但是,我遇到了这个错误:

Exception in thread "main" java.lang.NoSuchMethodError:org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(Ljava/io/File;)Lorg/neo4j/graphdb/GraphDatabaseService;
at org.neo4j.connection.Neo4j.run(Neo4j.java:43)
at org.neo4j.connection.Neo4j.main(Neo4j.java:37)

我想知道可能是什么错误? 这是我的代码:

public class Neo4j{
public enum NodeType implements Label{
    Issues, Cost, Reliability, Timeliness;
}
public enum RelationType implements RelationshipType{
    APPLIES_TO
}

String rows = "";
String nodeResult;
String resultString;
String columnString;
private static File DB_PATH = new File("/Users/phaml1/Documents/Neo4j/default.graphdb/import/");

public static void main(String[] args){
    Neo4j test = new Neo4j();
    test.run();
}
void run()
{   

    clear();
    GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);

    try(Transaction tx1 = db.beginTx();
            Result result = db.execute("MATCH(b:Business)-[:APPLIES_TO]->(e:Time) RETURN b,e"))
    {
        while(result.hasNext())
        {
            while ( result.hasNext() )
            {
                Map<String,Object> row = result.next();
                for ( Entry<String,Object> column : row.entrySet() )
                {
                    rows += column.getKey() + ": " + column.getValue() + "; ";
                }
                rows += "\n";
        }
    }

    try (Transaction something = db.beginTx();
            Result result1 = db.execute("MATCH(b:Business)-[:APPLIES_TO]->(e:Time) RETURN b,e"))
    {
        Iterator<Node> n_column = result.columnAs("n");
        for(Node node: Iterators.asIterable(n_column))
        {
            nodeResult = node + ": " + node.getProperties("Description");
        }
        List<String> columns = result.columns();
        columnString = columns.toString();
        resultString = db.execute("MATCH(b:Business)-[:APPLIES_TO]->(e:Time) RETURN b,e").resultAsString();
    }

    db.shutdown();
    }
}

private void clear(){
    try{
        deleteRecursively(DB_PATH);
    }
    catch(IOException e){
        throw new RuntimeException(e);
    }
}

}

1 个答案:

答案 0 :(得分:0)

看起来像Neo4j版本冲突。

GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);

在Neo4j 2x(https://neo4j.com/api_docs/2.0.3/org/neo4j/graphdb/factory/GraphDatabaseFactory.html#newEmbeddedDatabase(java.lang.String)

中有一个String作为参数

但是Neo4j 3x中的文件(http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/factory/GraphDatabaseFactory.html#newEmbeddedDatabase-java.io.File-

SDN可能会将Neo4j 2.3.6作为依赖项 - 请检查您的依赖树并覆盖Neo4j版本